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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAについて教えてく...
-
エクセルVBAで在庫の組み換え処...
-
VBAから書き込んだ条件付き初期...
-
【VBA】 結合セルに複数画像と...
-
ExcelのVBAコードについて教え...
-
修正依頼:【VBA】 結合セルに...
-
VBAでエクセルのテキストデータ...
-
WindowsのOutlook を VBA から...
-
Web画面の文字をVB6で取得したい
-
ExcelのVBAコードについて教え...
-
Excelのマクロについて教えてく...
-
VBA 最終行の取得がうまくいか...
-
VB.net 文字列から日付型へ変更...
-
Excel VBAについて。こんな動作...
-
不要項目の行削除方法について
-
【マクロ】オートフィルターに...
-
VBA 同じフォルダ内のすべての...
-
vba Windowオブジェクト(Window...
-
エクセルでCDOを使ったメール送...
-
[Excel VBA]特定の条件で文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】300万件越えCSVか...
-
VBAでcsvファイルもシートもあ...
-
ダブルコーテーション付きでCSV...
-
Excelマクロ 空白セルを無視し...
-
ファイル名を変数で書きこむfwr...
-
CSVデータの文字列置換
-
複数のファイルをまたぐエクセ...
-
pythonでリストをCSVに出力する...
-
CSVで余計な空行が入る
-
LibreOffice Calcのマクロで、...
-
CSVファイルの比較と結果の取得...
-
VB.netでShellExecuteがしたい
-
pythonのこのエラーがわかりません
-
PowerShellでファイルの連結方法
-
rubyを用いたCSVファイルの分割...
-
ブラウザ上でcsvファイルの編集
-
Rubyを使用してcsvファイルを処...
-
Sikulix2.0.5(Jython2.7.3)でcs...
-
kshスクリプトからCSVファイル...
-
fortranでデータの抜き出しをし...
おすすめ情報
補足要求に回答します。
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