VBAについて以下の手順のマクロを教えてください。
1. CSVを読み取る
2.CSVのレコード(1行目)とExcelの1行目から横に並んでいる番号と一致したら Excelの2行目からCSVにある2行目(aa,bb等のデータ)のデータを入れたいです。
イメージは↓です、
csv
1行目 000,001,002,003
2行目 aa,bb,cc,dd
Excel
1行目 000 001 003 002
2行目 aa bb dd cc
↑
csv1行目が000とExcelの1行目が000の場合、
Excelの2行目にaaを出力(csvのデータを出力)
CSVが3行目,4行目あれば Excelも3行目,4行目データが入ります。 (番号一致のみ出力)
まとめると
csvのキー名とExcelの1行目の値が一致したらそのデータを出力ということがしたいです。
No.7ベストアンサー
- 回答日時:
No.6
- 回答日時:
>一致しない場合もあります。
それはcsv側です。と言う事は、
・CSV側にはあってExcel側にはない?
・CSV側にはなくてExcel側にはある?
単純にExcelのデータをすべて消してCSVのデータを取り込むって事は不可能な感じの文章に思えますので(それなら付き合わせはしないでしょうし)、
上記の後者になるのかな?
>問題は、一致するかしないかの判定、一致した場合の情報を取ってくるというところができない
ちなみにですがExcelは単体インストールでしょうか、Access等も入っていますか?
ここからは独り言です:
CSVファイルを用いているのですから、1行目はExcel同様項目名が並んでいて以下にデータが存在するものだと思います。
最初の質問文でもそうなっているかな~と。
No.5
- 回答日時:
No4です。
あなたのなさりたいことは、以下のようなことでしょうか。
1.CSVファイルの1行目の各列の値をキーと呼ぶ。
下記のCSVファイル1行目 A,B,C,Dがキーとなる。
2.Excelの1行目の各列の値をキーと呼ぶ。
下記のExcelのX,B,A,Cがキーとなる。
CSVファイルの2行目以降のデータを、Excelのキーの並び順にExcelに格納したい。
ExcelのキーはX,B,A,Cであるが、XはCSVファイルのキーに存在しないので、その列は常に空欄になる。
CSVファイル
1行目 A,B,C,D
2行目 a1,b1,c1,d1
3行目 a2,b2,c2,d2
Excel
1行目 X B A C
2行目 空欄 b1 a1 c1
3行目 空欄 b2 a2 c2
No.4
- 回答日時:
No2です。
>確認したところ出力されましたが、以下の要望にまだ回答頂けておりません。。
>”csvのキー名(それぞれの番号)とExcelの1行目(それぞれの番号)の番号が一致した場合、そのデータを取得する”
すみません。上記の意味が分かりません。具体的に例をあげて説明していただけませんでしょうか。
CSVのキー名とは、どの値のことですか。
私がNo2で投稿したマクロは、
CSVのキーとは、あなたの例では、000のことかと思っていました。(CSVファイルの1行、1列目の値)
これが、excelの1行、A列の値(000)と一致しているので、
CSVファイルの2行目~最後の行 をexcelにコピーしています。
No.3
- 回答日時:
前提として。
>Excelの1行目から横に並んでいる番号と一致したら
・まず一致しない場合があるのか?
・もし一致しない場合がある時、それはCSV側なのかExcel側なのか?
・CSVはともかくExcel側での【000】とは、セルの値は文字列になっているのか?またはセルの書式設定にて3桁表示にしているただの【0】なのか?
と言うよりも【補足日時:2023/06/01 23:33】にて考えがまとまっているようですから、あとは形にするだけだと思いますよ。
配列よりは連想配列【Dictionaryオブジェクト】を使うのが個人的には好きです。
あとは上級回答者にお任せします。
回答内容については見られませんので、内容がゴチャゴチャになって質問者さんも大変でしょうし。
No.2
- 回答日時:
以下のマクロを標準モジュールに登録してください。
Const Folder As String = "D:\goo\data9"
はCSVファイルを格納してあるフォルダです。
あなたの環境にあわせて適切に設定してください。
Option Explicit
Public Sub CSV取り込み()
Const Folder As String = "D:\goo\data9"
Dim ws As Worksheet
Dim path As String
Dim sline As String
Dim head() As String
Dim elms() As String
Dim i As Long
Dim wrow As Long: wrow = 2
Set ws = Worksheets("Sheet1")
ws.Rows("2:" & Rows.count).ClearContents
path = Folder & "\" & "test.csv"
Open path For Input As #1
Line Input #1, sline
head = Split(sline, ",")
If head(0) <> ws.Cells(1, 1).Value Then
MsgBox ("キー不一致")
Exit Sub
End If
Do Until EOF(1)
Line Input #1, sline
elms = Split(sline, ",")
For i = 0 To UBound(elms)
ws.Cells(wrow, i + 1).Value = elms(i)
Next
wrow = wrow + 1
Loop
Close #1
MsgBox ("完了")
End Sub
No.1
- 回答日時:
補足要求です。
1.CSVファイルのファイル名は何でしょうか。
2.Excelのシート名は何でしょうか。
3.CSVファイルの1行、1列目の値とExcelの1行、A列の値が一致した場合、CSVファイルの2行目以降を、コピーするということで合ってますか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) Excelについて教えてください。 帳票データがあります。 アクセスに取り込むため、 データ形式にし 1 2022/06/08 19:59
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) PowerQueryで行数の指定はできますか? 2 2022/08/26 11:13
- Visual Basic(VBA) vbaマクロについて 【1.csv】をもとに【商品.csv】に有るものを【有り.csv】として名前を 1 2023/05/18 07:58
- Visual Basic(VBA) vbaマクロについて 次のようなマクロを組みたいです。 自分は初心者なので全くわかりません。 詳しく 8 2023/05/18 18:38
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(Microsoft Office) VBA CSV出力について 3 2023/04/19 14:14
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
AIに回答させるって
-
KEYENCEのシーケンスプログラム...
-
cout と cerrの違い
-
プログラムについての質問です...
-
printfとputcharの違いは
-
VBAのExecメソッドで画面を非表...
-
ListViewの複数選択について
-
バッチファイル フォルダサイ...
-
printfの書式%.*s
-
C# 標準出力のencodingをutf8に...
-
Windows Formアプリからコンソ...
-
ブランキング期間
-
AviUtl 出力の失敗
-
汎用人型決戦兵器「人造人間エ...
-
ACCESS クエリ→フォーム...
-
標準出力の上書き
-
C言語の標準関数の引数の順番に...
-
CRC16計算について
-
最近の画像生成AIについて。 長...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
コンセントの電力は入力と出力...
-
MMDでavi出力が出来ない
-
OBS配信すると、マイクが途切れ...
-
VBAでテキスト出力時のスペース...
-
cout と cerrの違い
-
COBOLのMOVEで桁数が異なる場合
-
ACCESS クエリ→フォーム...
-
アクセスでエクセルに出力する...
-
VBAのExecメソッドで画面を非表...
-
テキストファイルから特定の文...
-
Windows11対応の3入力1出力 USB...
-
VBAで有効数字の設定
-
スマホのバッテリー消費につい...
-
Excel VBAで値を変えながら、pd...
-
NTTのホームゲートウェイとOCN...
-
定格冷房能力(出力)とは 定格...
-
プログラムについての質問です...
-
PS5をMacBookProに出力したいの...
おすすめ情報
1.test.csv
2.sheet1
3.認識の通りです。
よろしくお願い致します。
配列にして番号が紐ずつ情報を取ってくるという方法でもよいです。。
ありがとうございます。
確認したところ出力されましたが、以下の要望にまだ回答頂けておりません。。
”csvのキー名(それぞれの番号)とExcelの1行目(それぞれの番号)の番号が一致した場合、そのデータを取得する”
分かりずらくすみません、よろしくお願いいたします。
一度CSVファイルを読み込んで配列に格納しておいてから、Excelの1行目の番号を1行ずつ見ていって、配列の中身と照合して、CSV側にその番号があればそのデータを、なければ空欄をExcel側に書き込んでいく、という処理になるのかなと思います。。
一致しない場合もあります。それはcsv側です。
000は文字通り000と文字列で入ります。
まとまっているけど、形にできないのでお願いしております。
問題は、一致するかしないかの判定、一致した場合の情報を取ってくるというところができないので聞いております。
分かりづらくすみません、
イメージはこんな感じです、
CSVファイルのヘッダ項目行(画像の2行目)の番号とExcelにあるヘッダ項目行(画像の9行目)の番号が一致したらその番号の情報をExcelに出力といった内容になります。
Excelにあるヘッダ項目行のデータを1行ずつ見ていって、CSVファイルのヘッダ項目行の中身と照合して、値があればそれを、なければ空欄をExcel側に出力する流れです、
上記の通りです。。