
vbaマクロについて
次のようなマクロを組みたいです。
自分は初心者なので全くわかりません。
詳しく教えていただけると嬉しいです。
Chat GPTで検索しましたが、ひとつひとつのプログラムが何を起動しているのかがわかりませんでしたので再度ご質問させていただきます。
m(_ _)m
【1.csv】をもとに【商品.csv】に有るものを【有り.csv】として名前をつけてデスクトップに保存したいです。
(A列の商品コードをキーにして)
【1.csv】も【商品.csv】も、行はそのときにより何行目まで値が入るかわかりません。
それぞれ最終行まで値が入る可能性があります。
(商品はもっといろいろな種類があります)
重複行は削除したいです。
(この場合だと、3なし が2行ありますが、1行のみにしたいです)
プログラムを教えてほしいです。
何卒よろしくお願いします。
-----
【商品.csv】
A B
1 りんご
2 みかん
3 なし
4 ぶどう
5 メロン
6 バナナ
7 かき
8 いちご
【1.csv】
A B C
3 なし 500円
9 パイナップル 1000円
11 ざくろ 400円
5 メロン 3000円
3 なし 500円
1 りんご 100円
ーーーーー
【有り.csv】
A B C
3 なし 500円
5 メロン 3000円
1 りんご 100円
No.8ベストアンサー
- 回答日時:
以下の前提でのマクロです。
1.区切り文字はカンマとする。
2.各ファイルは、デスクトップ上に存在する、もしくは、作成する。
3.各ファイルの1行目は見出しである。
下記URLにアップしました。
https://ideone.com/LQcCyI
ありがとうございます!
アップしていただいたものを確認いたしました。
とてもわかりやすく記載していただきありがとうございますm(_ _)m
おかげさまで問題解決しそうです!
長い時間お付き合いくださり、また一生懸命考えていただき、わかりやすく回答もいただきまして大変感謝いたします。
こんなに親身に相談にのっていただけるなんて思ってもおりませんでしたので本当に嬉しく思いますm(_ _)m
No.7
- 回答日時:
プログラムのそれぞれの意味をここで回答することは不可能でしょう。
なぜなら複数のコードを組み合わせてプログラムを作るので、全く理解できない人に対して逐一説明することは困難だからです。
ChatGPTに聞いてみました。
コードの意味を知る必要がある場合はご自身で調べてください。
それを論理的に組み立てれば[理解できる]というレベルアップになります。
【質問】
テックリーダーのように振舞ってください。
[要件]
・商品.csvというCSVファイルが存在し、1列目には商品ID、2列名には商品名が書き出されている。
・1.csvというCSVファイルが存在し、1列目には商品ID、2列目には商品名、3列目には金額が書き出されている。
・1.csvと商品.csvを読み込み、1列目と2列目が合致する1.csvの行を、有り.csvというCSVファイルに書き出す。
・有り.csvの行内容は重複してはならない。
以上の要件を満たすVBAを作成してください。
【回答】
以下は、指定された要件を満たすVBAコードの例です。
Sub GenerateInventoryCSV()
Dim productFile As String
Dim csvFile As String
Dim outputFileName As String
Dim productData As Object
Dim csvData As Object
Dim outputData As Object
Dim productID As String
Dim productName As String
Dim amount As String
Dim row As Object
' ファイルのパスとファイル名を指定
productFile = "商品.csv"
csvFile = "1.csv"
outputFileName = "有り.csv"
' ファイルのデータを読み込む
Set productData = CreateObject("Scripting.Dictionary")
Set csvData = CreateObject("Scripting.Dictionary")
Set outputData = CreateObject("Scripting.Dictionary")
' 商品.csvのデータを読み込む
Open productFile For Input As #1
Do Until EOF(1)
Line Input #1, csvLine
csvFields = Split(csvLine, ",")
productID = Trim(csvFields(0))
productName = Trim(csvFields(1))
productData(productID) = productName
Loop
Close #1
' 1.csvのデータを読み込み、有り.csvに書き出す
Open csvFile For Input As #2
Open outputFileName For Output As #3
Do Until EOF(2)
Line Input #2, csvLine
csvFields = Split(csvLine, ",")
productID = Trim(csvFields(0))
productName = Trim(csvFields(1))
amount = Trim(csvFields(2))
' 商品IDと商品名が合致する行を有り.csvに書き出す
If productData.Exists(productID) And Not outputData.Exists(productID) Then
outputData(productID) = productName
Print #3, productID & "," & productName & "," & amount
End If
Loop
Close #2
Close #3
MsgBox "有り.csvを生成しました。"
End Sub
上記のコードでは、指定された要件に従ってCSVファイルを読み込み、条件に合致する行を別のCSVファイルに書き出しています。VBAの辞書オブジェクトを使用してデータの重複を管理し、有り.csvの行内容が重複しないようにしています。
回答いただき大変ありがとうございます。
初心者すぎて、すごいという言葉しか出てきません。。
こちらを参考にさせていただき、少しでも理解できるように勉強したいと思います。
お時間をさいて回答いただき感謝しかないです。
本当にありがとうございますm(_ _)m
No.6
- 回答日時:
ちょっと気になった点。
【1.csv】の 1 の意味はもしかして【1月(日)の区分け】を意味しており、読み込むデータは月又は日で違うのでその選択が必要となるとか?
でもそうなると重複を削除するなら、それに見合った件数についてはExcelで計算させるてるのかな?
そしてそのシートをCSV化させたいとか。
・・・でもこの推測ですとCSVファイルがかなり増えるので、やっぱ実際に使うときは内容的に異なる物かなぁ?
No.5
- 回答日時:
追加の補足要求です。
区切り文字がカンマと仮定しての話ですが、
各項目は、ダブルクオート("")でくくられていますか。
それとも、くくられていませんか。
添付図の左側(ダブルクートなし)でしょうか。
それとも右側(ダブルクートでくくられている)
でしょうか。
左側のテキスト
商品コード,品名,価格
3,なし,500円
9,パイナップル,1000円
11,ざくろ,400円
5,メロン,3000円
3,なし,500円
1,りんご,100円
右側のテキスト
"商品コード","品名","価格"
"3","なし","500円"
"9","パイナップル","1000円"
"11","ざくろ","400円"
"5","メロン","3000円"
"3","なし","500円"
"1","りんご","100円"

No.4
- 回答日時:
そもそもCSVファイルを加工してCSVファイルを作成するってなら、VBA(Excelかな?)で行なわなくても宜しいのではないかなと。
ただしお持ちなのがExcel単体ではなくOffice365などAccessもインストールされているかと、ちょっと気になりました。
見出し行については問題がなければどんな項目なのか記載があったら良かったかもですね。
No.3
- 回答日時:
No2です。
>見た目はエクセルと同じなのですが、どうお答えすればよいのか。。スペースなしでよいかと思います。すべてセルに値が入っています。
商品.csvをexcelで開くのではなく、エディタ(メモ帳など)で開いてください。そうすると、区切り文字がどうなっているかわかります。
excelで開くと、区切り文字が見えなくなってしまいます。
正確な区切り文字が判らないとマクロが組めません。
No.2
- 回答日時:
補足要求です。
1.各ファイルとも見出し行はないですね。
(1行目からデータが開始という意味です)
2.CSVファイルの場合、通常はカンマ(,)が区切文字なのですが、
提示された例では、半角のスペースのように見えます。
区切り文字は、半角のスペース1桁で間違いないですか。
3.商品.csv と 1.csv のファイルは、デスクトップではなく、
他のフォルダに格納されている前提で良いですか。
No.1
- 回答日時:
この質問では利用規約違反になってしまいますから、
『Chat GPTで検索しましたが、ひとつひとつのプログラムが何を起動しているのかがわかりませんでしたので再度ご質問させていただきます。』
これでコードが作成出来てたのなら、その内容について質問・助言を得るようにされては?
別のコードで回答をされてもイレギュラーなトラブルが起きたりしても、解決が困難でしょう。
あとは外部委託するとか知恵袋なら宿題カテもある位なので、違反行為にはならないかもですね。
ところでAccessではされないのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaマクロについて 【1.csv】をもとに【商品.csv】に有るものを【有り.csv】として名前を 1 2023/05/18 07:58
- Visual Basic(VBA) vbaマクロについて 【シート2】をもとに【シート1】に有るものを「有り.csv」としてデスクトップ 3 2023/05/07 22:30
- Visual Basic(VBA) vbaマクロについて シート1のA列にある商品コードが シート2のB列にある商品コードに該当する場合 2 2023/05/17 13:41
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- インターネットビジネス ネットショップでトレーディングカードを売ろうと思っているのですが、初めにショップ開設記念で還元率がす 1 2023/08/17 23:30
- Visual Basic(VBA) あるマクロを起動し、その際に使用したデスクトップにある1.csv(マクロを起動したせいで加工されてい 3 2023/06/02 22:35
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- メルカリ メルカリのコメント欄について 4 2022/04/24 23:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでcsvファイルもシートもあ...
-
ダブルコーテーション付きでCSV...
-
【ExcelVBA】300万件越えCSVか...
-
バッチファイルで複数のディレ...
-
VB.netでShellExecuteがしたい
-
Excelマクロ 空白セルを無視し...
-
CSVで余計な空行が入る
-
LibreOffice Calcのマクロで、...
-
マクロで使うfor文
-
文字列の結合がうまくいかない
-
エクセルの任意のシートをcs...
-
【C#】 csvファイルをバイナリ...
-
Sikulix2.0.5(Jython2.7.3)でcs...
-
VBAで複数のCSVからレコードセ...
-
ファイル名を変数で書きこむfwr...
-
CSVファイルの比較と結果の取得...
-
バッチ処理 特定の文字以降を...
-
[Excel VBA] 入力された値に応じて
-
フォーム間でtxtbox値の渡しで...
-
型の値をDataGridViewセルに変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでcsvファイルもシートもあ...
-
Excelマクロ 空白セルを無視し...
-
【ExcelVBA】300万件越えCSVか...
-
ダブルコーテーション付きでCSV...
-
ファイル名を変数で書きこむfwr...
-
VBAで複数のCSVからレコードセ...
-
CSVデータの文字列置換
-
複数のファイルをまたぐエクセ...
-
CSVファイルの比較と結果の取得...
-
【C#】 csvファイルをバイナリ...
-
PowerShellからGhostscriptを動...
-
EXCEL→CSV保存時のダブルクォー...
-
VB.NETでオブジェクトの内容を...
-
パイソン文法で ファイルオープ...
-
VB.netでShellExecuteがしたい
-
PowerShellでファイルの連結方法
-
Rubyを使用してcsvファイルを処...
-
rubyを用いたCSVファイルの分割...
-
バッチファイルでcsvファイルに...
-
エクセルの任意のシートをcs...
おすすめ情報
補足要求に回答します。
1.各ファイルとも見出し行はないですね。
(1行目からデータが開始という意味です)
⇒すみません。見出し1行ありますので2行目からデータがはじまります。
2.CSVファイルの場合、通常はカンマ(,)が区切文字なのですが、
提示された例では、半角のスペースのように見えます。
区切り文字は、半角のスペース1桁で間違いないですか。
⇒見た目はエクセルと同じなのですが、どうお答えすればよいのか。。スペースなしでよいかと思います。すべてセルに値が入っています。
3.商品.csv と 1.csv のファイルは、デスクトップではなく、
他のフォルダに格納されている前提で良いですか。
⇒こちらの2つについてもデスクトップにおいています。
遅くなり申し訳ありません。回答わかりづらいかと思いますがよろしくお願いいたしますm(_ _)m
補足要求の回答です。
1.各ファイルとも見出し行はないですね。
(1行目からデータが開始という意味です)
⇒すみません。見出しが1行目にあります。2行目からデータがはじまります。
2.CSVファイルの場合、通常はカンマ(,)が区切文字なのですが、
提示された例では、半角のスペースのように見えます。
区切り文字は、半角のスペース1桁で間違いないですか。
⇒見た目はエクセルと同じなので、何とお答えすればよいのかわかりませんが、
スペースはないと考えていただいてよいと思います。セルに値が入っています。
3.商品.csv と 1.csv のファイルは、デスクトップではなく、
他のフォルダに格納されている前提で良いですか。
⇒2つともデスクトップにおいています。
回答遅くなり申し訳ありません。
わかりづらいかと思いますがよろしくお願いいたしますm(_ _)m
利用規約に反するのですね。。
それはいけませんでしたね。
回答ありがとうございますm(_ _)m
アクセスも使えません。
何もわからずすみません。
お返事遅くなり申し訳ありませんでした。
了解しました!
今すぐ確認できないため申し訳ありませんが明日まで回答お待ちくださいm(_ _)m
どうもありがとうございます!
カンマで区切られており、スペースはありませんでした!
追加補足の回答です
区切り文字がカンマと仮定しての話ですが、
各項目は、ダブルクオート("")でくくられていますか。
それとも、くくられていませんか。
⇒ダブルクオートでくくられていません
すみませんがよろしくお願いいたします。
1.csvは名前には特に意味はありません。
考えていただきありがとうございますm(_ _)m