- ベストアンサー
こういうマクロの作成は可能でしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
以下の工夫は、最後が、フィリピン産となった場合の「県産」と追加させないようになっています。つまり、最後の文字をそのまま付け加えるようになっています。また、追加分は、追加分だけを加えるようになっていますから、改めて作るようにするためには、 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
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
プログラムを造れというのでなく、自分でマクロの記録から始めて、やってみないと。回答者は下請けではない。 元データの在り様(行・列・シート)の質問文での説明が大切なのだが質問には載せてない。 推測では 商品名ー産地名 のデータ(行)があると思われる。 これを別作業シートにコピーし(元は残すため。元のデータの行に連番を振っても良い) (1)商品別にソートする。その操作をしてマクロの記録を採れる。 同じ商品は行的に近隣に集る。 (2)ソート後のシートで 商品が同じ間は産地を調べ(産地も同じなら2つ目以降は読み飛ばし)、産地名を/で区切って連ねていく。隣のセルに移していくほうが易しいとおもうが。 ーーー これらにはデータ処理のコントロール(続き具合を扱うロジック、手順)の扱い方のコツの会得が必要で、初めての人には難しい。
お礼
いろいろ考えて頂き、ありがとうございました。 最初は関数を使って、何とかしようと思ったのですが複雑になりすぎるので 何とかマクロで出きればなと思い質問しました。 マクロ記録はある程度できますが、これから少しずつ勉強していきます。
お礼
Wendy02さま 驚きの一言で、完璧なマクロありがとうございました。 自動でマクロ作るくらいの知識しかないので、これから少しずつ勉強したいと思います。 いろいろ考えて頂き、本当にありがとうございました。