プロが教えるわが家の防犯対策術!

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円

質問者からの補足コメント

  • 補足要求に回答します。
    1.各ファイルとも見出し行はないですね。
      (1行目からデータが開始という意味です)
    ⇒すみません。見出し1行ありますので2行目からデータがはじまります。

    2.CSVファイルの場合、通常はカンマ(,)が区切文字なのですが、
    提示された例では、半角のスペースのように見えます。
    区切り文字は、半角のスペース1桁で間違いないですか。
    ⇒見た目はエクセルと同じなのですが、どうお答えすればよいのか。。スペースなしでよいかと思います。すべてセルに値が入っています。

    3.商品.csv と 1.csv のファイルは、デスクトップではなく、
    他のフォルダに格納されている前提で良いですか。
    ⇒こちらの2つについてもデスクトップにおいています。

    遅くなり申し訳ありません。回答わかりづらいかと思いますがよろしくお願いいたしますm(_ _)m

      補足日時:2023/05/18 21:52
  • 補足要求の回答です。

    1.各ファイルとも見出し行はないですね。
      (1行目からデータが開始という意味です)
    ⇒すみません。見出しが1行目にあります。2行目からデータがはじまります。


    2.CSVファイルの場合、通常はカンマ(,)が区切文字なのですが、
    提示された例では、半角のスペースのように見えます。
    区切り文字は、半角のスペース1桁で間違いないですか。
    ⇒見た目はエクセルと同じなので、何とお答えすればよいのかわかりませんが、
    スペースはないと考えていただいてよいと思います。セルに値が入っています。

    3.商品.csv と 1.csv のファイルは、デスクトップではなく、
    他のフォルダに格納されている前提で良いですか。
    ⇒2つともデスクトップにおいています。

    回答遅くなり申し訳ありません。
    わかりづらいかと思いますがよろしくお願いいたしますm(_ _)m

      補足日時:2023/05/18 21:58
  • 利用規約に反するのですね。。
    それはいけませんでしたね。
    回答ありがとうございますm(_ _)m

    アクセスも使えません。
    何もわからずすみません。
    お返事遅くなり申し訳ありませんでした。

      補足日時:2023/05/18 22:01
  • 了解しました!
    今すぐ確認できないため申し訳ありませんが明日まで回答お待ちくださいm(_ _)m
    どうもありがとうございます!

      補足日時:2023/05/18 23:39
  • カンマで区切られており、スペースはありませんでした!

    追加補足の回答です

    区切り文字がカンマと仮定しての話ですが、
    各項目は、ダブルクオート("")でくくられていますか。
    それとも、くくられていませんか。

    ⇒ダブルクオートでくくられていません

    すみませんがよろしくお願いいたします。

      補足日時:2023/05/19 12:14
  • 1.csvは名前には特に意味はありません。
    考えていただきありがとうございますm(_ _)m

      補足日時:2023/05/19 12:16

A 回答 (8件)

以下の前提でのマクロです。


1.区切り文字はカンマとする。
2.各ファイルは、デスクトップ上に存在する、もしくは、作成する。
3.各ファイルの1行目は見出しである。

下記URLにアップしました。
https://ideone.com/LQcCyI
    • good
    • 0
この回答へのお礼

あなたに会えてよかった

ありがとうございます!

アップしていただいたものを確認いたしました。
とてもわかりやすく記載していただきありがとうございますm(_ _)m

おかげさまで問題解決しそうです!

長い時間お付き合いくださり、また一生懸命考えていただき、わかりやすく回答もいただきまして大変感謝いたします。

こんなに親身に相談にのっていただけるなんて思ってもおりませんでしたので本当に嬉しく思いますm(_ _)m

お礼日時:2023/05/19 18:05

プログラムのそれぞれの意味をここで回答することは不可能でしょう。


なぜなら複数のコードを組み合わせてプログラムを作るので、全く理解できない人に対して逐一説明することは困難だからです。

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の行内容が重複しないようにしています。
    • good
    • 11
この回答へのお礼

回答いただき大変ありがとうございます。

初心者すぎて、すごいという言葉しか出てきません。。
こちらを参考にさせていただき、少しでも理解できるように勉強したいと思います。
お時間をさいて回答いただき感謝しかないです。
本当にありがとうございますm(_ _)m

お礼日時:2023/05/19 12:20

ちょっと気になった点。



【1.csv】の 1 の意味はもしかして【1月(日)の区分け】を意味しており、読み込むデータは月又は日で違うのでその選択が必要となるとか?
でもそうなると重複を削除するなら、それに見合った件数についてはExcelで計算させるてるのかな?
そしてそのシートをCSV化させたいとか。

・・・でもこの推測ですとCSVファイルがかなり増えるので、やっぱ実際に使うときは内容的に異なる物かなぁ?
    • good
    • 0

追加の補足要求です。


区切り文字がカンマと仮定しての話ですが、
各項目は、ダブルクオート("")でくくられていますか。
それとも、くくられていませんか。
添付図の左側(ダブルクートなし)でしょうか。
それとも右側(ダブルクートでくくられている)
でしょうか。

左側のテキスト
商品コード,品名,価格
3,なし,500円
9,パイナップル,1000円
11,ざくろ,400円
5,メロン,3000円
3,なし,500円
1,りんご,100円

右側のテキスト
"商品コード","品名","価格"
"3","なし","500円"
"9","パイナップル","1000円"
"11","ざくろ","400円"
"5","メロン","3000円"
"3","なし","500円"
"1","りんご","100円"
「vbaマクロについて 次のようなマクロを」の回答画像5
    • good
    • 1

そもそもCSVファイルを加工してCSVファイルを作成するってなら、VBA(Excelかな?)で行なわなくても宜しいのではないかなと。


ただしお持ちなのがExcel単体ではなくOffice365などAccessもインストールされているかと、ちょっと気になりました。

見出し行については問題がなければどんな項目なのか記載があったら良かったかもですね。
    • good
    • 0

No2です。


>見た目はエクセルと同じなのですが、どうお答えすればよいのか。。スペースなしでよいかと思います。すべてセルに値が入っています。

商品.csvをexcelで開くのではなく、エディタ(メモ帳など)で開いてください。そうすると、区切り文字がどうなっているかわかります。
excelで開くと、区切り文字が見えなくなってしまいます。
正確な区切り文字が判らないとマクロが組めません。
    • good
    • 2

補足要求です。


1.各ファイルとも見出し行はないですね。
  (1行目からデータが開始という意味です)

2.CSVファイルの場合、通常はカンマ(,)が区切文字なのですが、
提示された例では、半角のスペースのように見えます。
区切り文字は、半角のスペース1桁で間違いないですか。

3.商品.csv と 1.csv のファイルは、デスクトップではなく、
他のフォルダに格納されている前提で良いですか。
    • good
    • 4

この質問では利用規約違反になってしまいますから、



『Chat GPTで検索しましたが、ひとつひとつのプログラムが何を起動しているのかがわかりませんでしたので再度ご質問させていただきます。』

これでコードが作成出来てたのなら、その内容について質問・助言を得るようにされては?
別のコードで回答をされてもイレギュラーなトラブルが起きたりしても、解決が困難でしょう。
あとは外部委託するとか知恵袋なら宿題カテもある位なので、違反行為にはならないかもですね。

ところでAccessではされないのでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!