• ベストアンサー

こういうマクロの作成は可能でしょうか?

こういうマクロの作成は可能でしょうか? 添付画像を参照いただきたいのですが、 I列の商品が一致するときに、H列に産地(G列)の合体版を 自動で入れるマクロを考えております。 まとめて範囲選択して、マクロ実行で完成するのを作りたいと思っています。 ※できれば例のように○○県産の「県産」は最後のみ入れる形が希望です。 同じような作業が、毎日10箇所くらいある為、マクロを作りたいんですが 知識不足で自分ではできません。 どなたかお力を貸していただけませんでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

以下の工夫は、最後が、フィリピン産となった場合の「県産」と追加させないようになっています。つまり、最後の文字をそのまま付け加えるようになっています。また、追加分は、追加分だけを加えるようになっていますから、改めて作るようにするためには、 For i = j To m - 1 を、そのまま、For i = 2 To m - 1 にしてください。 但し、現状のマクロでは、岐阜/三重/三重県産 となるような、二重登録防止は付けていません。それと、図の色分けが気になりますね。 '//標準モジュール・該当シートモジュール Sub TestMacro1()  Dim i As Long, d As Long, e As Long  Dim j As Long, m As Long, n As Long  m = Cells(Rows.Count, 7).End(xlUp).Row '最終行  n = Cells(Rows.Count, 8).End(xlUp).Row '出来上がり行  If n > 2 Then '追加の為の処理   j = n  Else   j = 2 '初期行  End If  Application.ScreenUpdating = False  For i = j To m - 1   If Cells(i, 9).Value Like Cells(i + 1, 9).Value And d = 0 Then    d = i   ElseIf Not (Cells(i, 9).Value Like Cells(i + 1, 9).Value) And d > 0 Then    e = i    Cells(d, 8).Value = CombineData(d, e, 7)    d = 0   End If  Next  Application.ScreenUpdating = True End Sub Private Function CombineData(ByVal d As Long, ByVal e As Long, ByVal k As Long)  Dim buf As String  Dim dat As String  Dim rng As Range  Dim i As Long  With ActiveSheet   Set rng = .Range(.Cells(d, k), .Cells(e, k))  End With  For i = 1 To rng.Rows.Count   buf = rng(i).Value   If rng.Rows.Count <> i Then    buf = Replace(buf, "県", "")    buf = Replace(buf, "産", "")   End If   dat = dat & "/" & buf   buf = ""  Next  CombineData = Mid(dat, 2) End Function

excel110
質問者

お礼

Wendy02さま 驚きの一言で、完璧なマクロありがとうございました。 自動でマクロ作るくらいの知識しかないので、これから少しずつ勉強したいと思います。 いろいろ考えて頂き、本当にありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

プログラムを造れというのでなく、自分でマクロの記録から始めて、やってみないと。回答者は下請けではない。 元データの在り様(行・列・シート)の質問文での説明が大切なのだが質問には載せてない。 推測では 商品名ー産地名 のデータ(行)があると思われる。 これを別作業シートにコピーし(元は残すため。元のデータの行に連番を振っても良い) (1)商品別にソートする。その操作をしてマクロの記録を採れる。 同じ商品は行的に近隣に集る。 (2)ソート後のシートで  商品が同じ間は産地を調べ(産地も同じなら2つ目以降は読み飛ばし)、産地名を/で区切って連ねていく。隣のセルに移していくほうが易しいとおもうが。 ーーー これらにはデータ処理のコントロール(続き具合を扱うロジック、手順)の扱い方のコツの会得が必要で、初めての人には難しい。

excel110
質問者

お礼

いろいろ考えて頂き、ありがとうございました。 最初は関数を使って、何とかしようと思ったのですが複雑になりすぎるので 何とかマクロで出きればなと思い質問しました。 マクロ記録はある程度できますが、これから少しずつ勉強していきます。

関連するQ&A