Excelの複数行をDataGridViewに張り付けてテキストボックスに入れる
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2023/6/21 16:14:44
> Excel(2016)のセルA1~A100をコピーしてDataGridViewのセル貼り付けてそれをテキストボックスに記入する方法を教えてください。
プログラムから、直接 .xlsx ファイルを読み取る方法もありますが、
今回はクリップボード経由で操作したいのですね?
書式等は不要で、セル値だけ得られれば良いのでしょうから、
このように書けば OK です。
これにより、選択範囲の内容が文字列として得られます。
列の区切りは タブ文字
行の区切りは CrLf です。
このようにして、個々のセルのデータにアクセスできます。
なお、セル内改行がある場合は、Lf が使われます。
また、改行を含むセルは「"」で囲まれた文字列になります。
セル内に「"」があった場合も「"」で囲まれます。その場合、元の「"」は「""」と連記されるので
それらを復元する処理も必要になってきます。
切り出した文字列は、必要に応じて二次元配列やジャグ配列などに
詰め直しておくと便利かもしれません。
> DataGridViewのセル貼り付けてそれをテキストボックスに記入する方法を教えてください。
ん? DataGridView に表示したいのですか?
TextBox に表示したいのですか?
まぁいずれにせよ、上記のようにして切り出した文字列を
DataGridView の任意のセルあるいは TextBox の Text プロパティに
セットしてやれば、目的を果たせるかと思いますよ。
プログラムから、直接 .xlsx ファイルを読み取る方法もありますが、
今回はクリップボード経由で操作したいのですね?
書式等は不要で、セル値だけ得られれば良いのでしょうから、
このように書けば OK です。
Dim data As String = Clipboard.GetText()
これにより、選択範囲の内容が文字列として得られます。
列の区切りは タブ文字
行の区切りは CrLf です。
Dim rows() As String = data.Split(ControlChars.Tab)
For Each row As String In rows
Dim cells() As String = Split(row, vbCrLf)
For Each cell As String In cells
Dim text As String = cell
Next
Next
このようにして、個々のセルのデータにアクセスできます。
なお、セル内改行がある場合は、Lf が使われます。
また、改行を含むセルは「"」で囲まれた文字列になります。
セル内に「"」があった場合も「"」で囲まれます。その場合、元の「"」は「""」と連記されるので
それらを復元する処理も必要になってきます。
For Each cell As String In cells
Dim text As String = cell
'「"」で始まる文字列だった場合は
If text.StartsWith("""") Then
'先頭の「"」と末尾の「"」を取り除き、
text = text.Substring(1, text.Length - 2)
'さらに文字列中の「""」を「"」に置換します。
text = text.Replace("""""", """")
End If
Next
切り出した文字列は、必要に応じて二次元配列やジャグ配列などに
詰め直しておくと便利かもしれません。
> DataGridViewのセル貼り付けてそれをテキストボックスに記入する方法を教えてください。
ん? DataGridView に表示したいのですか?
TextBox に表示したいのですか?
まぁいずれにせよ、上記のようにして切り出した文字列を
DataGridView の任意のセルあるいは TextBox の Text プロパティに
セットしてやれば、目的を果たせるかと思いますよ。
Excel(2016)のセルA1~A100をコピーしてDataGridViewのセル貼り付けてそれをテキストボックスに記入する方法を教えてください。
DataGridViewは2列で左に管理番号(=行数)、右に品名となっています。
初期値は管理番号1で品名は空白となっています。
品名の一番上のセル(空白)にエクセルの値をコピペし、100行表示されるようにしたいです。
また、貼り付けられたら管理番号を自動で記入する。
挿入ボタンみたいなのを用意し、それを押下すると品名を100行分テキストボックスに横並びで記入する。
以上、よろしくお願いいたします。