![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
エクセルVBAで以下のような処理を行うプログラムを作成したいのですが、
シロウトなんで、なかなかスマートに作れません。
どのようにすればいいかご教示いただけたら有り難いです。
(1)下記のように、縦横のマトリクス表にデータが入力されている。
A B C ・・
1
2
3
・
・
(2)これを別シートに縦に2列にデータを並べるように処理する。
左列には"列項目&行項目"、右列には該当するデータをセットする。
A1 A1のデータ
A2 A2のデータ
A3 A3のデータ
・ ・
B1 B1のデータ
・ ・
・ ・
(3)尚、列項目(A.B.C...)と行項目(1.2.3...)の項目数は不定で、セルが空白になるまで、
処理を繰り返すかたちにする。
以上のような条件ですが、よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
こんばんは。
>(2)これを別シートに縦に2列にデータを並べるように処理する。
> 左列には"列項目&行項目"、右列には該当するデータをセットする。
そうしたら、事実上、データは1列ではありませんか?
>左列には"列項目&行項目"
>A1 A1のデータ
単に、アドレスのことではありませんか?
列項目&行項目として、例が挙げれている内容とは違うのでしたら、ご指摘ください。
もし、項目として別にあるのでしたら、データの左端上の部分のデータはないことになりますね。
>列項目(A.B.C...)と行項目(1.2.3...)の項目数は不定で、セルが空白になるまで、
よく意味がわかりません。マトリックスで取得したら、もし、項目が別にあるのなら左端上の空白以外には、空白セルはないことになりますが、データの中間地で空白があったら、そこでデータの取得は終わりだということですか?
とりあえず、一旦、マトリックスで取得して、2次元配列で、アドレスと値を入れなおして、その配列を、別のシートに貼り付けるという方法です。256*256 以上のデータは取得しても、2列のセルには入りません。
アドレスを入れるところで、時間的なロスが生じています。数値からアドレスに変換するのは、面倒なので、そのままセルにアクセスしてしまいました。
'<標準モジュール>
Sub Matrix2Vertical()
Dim ArBuf As Variant, myArray As Variant, MaxNum As Long
Dim j As Long, i As Long, k As Long, Sh2 As Worksheet
'===設定:移し変えるシート================
Set Sh2 = Worksheets("Sheet2")
'=======================================
With Range("A1").CurrentRegion
If .Count = 1 Then _
MsgBox "データがありません。", vbInformation: Exit Sub
MaxNum = Application.Min(.Count, Rows.Count)
ArBuf = .Value
ReDim myArray(.Count - 1, 1)
'2次元配列を入れなおし
For j = LBound(ArBuf, 2) To UBound(ArBuf, 2)
For i = LBound(ArBuf, 1) To UBound(ArBuf, 1)
myArray(k, 0) = Cells(i, j).Address(0, 0)
myArray(k, 1) = ArBuf(i, j)
k = k + 1
Next i
If k > MaxNum Then Exit For '多少のズレはあっても問題ないはず
Next j
End With
Application.ScreenUpdating = False
Sh2.Range("A1").Resize(MaxNum, 2).Value = myArray
Application.ScreenUpdating = True
Set Sh2 = Nothing
Beep
End Sub
ご丁寧にありがとうございました。
本当に助かりました!
なんとか自分でやろうと、一日やってましたが、
少しずつみえてきました。ご教示頂いた内容を参考に
させていただくと、おそらくできると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Visual Basic(VBA) Excelで横書き50行の漢字テストデータを縦書きのテスト問題にしたい。 6 2022/04/27 15:03
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
VBAでページ番号、ページ最終行...
-
MSFlexGridのデータ表示位置の設定
-
DataGrdViewに関連付けたデータ...
-
アクセス2007 レポートで表示さ...
-
GASでスプレッドシートの一番上...
-
エクセルVBAによるマトリク...
-
VB DB更新時にパラメーターへ...
-
カンマ区切りの文字列にPOSTデ...
-
エクセルマクロ小数点桁数
-
Visual C++ 6.0で ODBCを使用せ...
-
GridViewにバインドせずにデー...
-
Listviewのデータを上から順番...
-
VB.NETにてDB2のBLOB型のデータ...
-
月間検索回数
-
.NET SqlDataReader のレコー...
-
VBAで表に1つでも入ってたら取...
-
VBA:小数点以下の数字を取得で...
-
特定のセルが空白だったら、そ...
-
Accessのクエリで、replace関数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】先頭の「0」飛び...
-
DataGrdViewに関連付けたデータ...
-
Listviewのデータを上から順番...
-
GASでスプレッドシートの一番上...
-
GridViewにバインドせずにデー...
-
コンパイルエラーSubまたは...
-
.NET SqlDataReader のレコー...
-
VBAでページ番号、ページ最終行...
-
DataGridViewで表示に制限をつ...
-
MSFlexGridのデータ表示位置の設定
-
ASP C# データベースから1行取得
-
【ASP.NET MVC】一覧編集画面
-
C# データ配列から画像を作成す...
-
VBA ピボットテーブル自動更新
-
エクセルマクロ小数点桁数
-
VBによる可変長ファイルの読み書き
-
ASP.Net ObjectDataSource
-
GridViewを自動的にスクロール...
-
ListViewで条件によって表示を...
-
コンボボックス
おすすめ情報