いつもお世話になっております。
特定の文字があるときに複数行のセルを1つにまとめるにはどうすれば良いでしょうか?
ちなみにヴァージョンはEXCEL2007を使用しておりますので
どうぞアドバイスよろしくお願い致します。
【やりたいこと】
例えば下記のようなSheet1があるとして
日付毎に品川店で出荷するものがあればSHEET2の
A列=出荷日、B列=店舗、C列に品番全てを入力したいです。
難しいようであれば品番だけでも一つのセルにまとめたいのですが可能でしょうか?
SHEET1 元データ 1行目が項目でA2~J200行まで
A列 B列 . . . F列
品番 店舗 出荷日
100-03 品川 5/29
100-02 自由が丘 6/1
100-03 横浜 6/1
100-04 品川 5/31
100-05 品川 5/29
SHEET2 チェックリスト 1行目が項目
A列 B列 C列
出荷日 店舗 品番
5/29 品川 100-03*100-05
5/31 品川 100-04
Sub Sample1()
Dim i As Long
Dim j As Long
Dim k As Long
Dim n As Long
Dim LstR As Long
'出荷日
n = 2
LstR = Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Sheet1").Select
For i = 2 To LstR
If Cells(i, 2) = "品川" Then
Cells(i, 2).Offset(, 4).Resize(, 1).Copy _
Sheets("Sheet2").Cells(n, 1)
n = n + 1
End If
Next i
'店舗
For j = 2 To LstR
If Cells(j, 2) = "品川" Then ←B列の2行目から張りたい
Cells(j, 2).Copy
Sheets("Sheet2").Cells(n, 2)
n = n + 1
End If
Next j
'品番をまとめる
End Sub
↓をやると一つのセルにまとめられるのですが
"品川"と条件を付けるのにどうしたらよいかわかりません。。。
どうぞお助け願い致します。
Dim i As Long
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
Range("B1").value = Range("B1").value & Range("A" & i)
Next i
No.3
- 回答日時:
こんにちは!
すでに回答は出ていますので、参考程度で・・・
標準モジュールです。
Sub Sample1()
Dim myDic As Object
Dim i As Long, lastRow As Long
Dim myStr As String, wS As Worksheet
Dim myKey, myItem, myAry
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "A"), wS.Cells(lastRow, "C")).ClearContents
End If
With Worksheets("Sheet1")
wS.Range("A:A").NumberFormatLocal = .Range("C2").NumberFormatLocal
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
If .Cells(i, "B") = "品川" Then '//★//
myStr = .Cells(i, "B") & "_" & .Cells(i, "C")
If Not myDic.exists(myStr) Then
myDic.Add myStr, .Cells(i, "A")
Else
myDic(myStr) = myDic(myStr) & "*" & .Cells(i, "A")
End If
End If
Next i
End With
myKey = myDic.keys
myItem = myDic.items
For i = 0 To UBound(myKey)
myAry = Split(myKey(i), "_")
wS.Cells(i + 2, "A") = myAry(1)
wS.Cells(i + 2, "B") = myAry(0)
wS.Cells(i + 2, "C") = myItem(i)
Next i
Set myDic = Nothing
wS.Columns.AutoFit
MsgBox "完了"
End Sub
※ 今回は「品川」限定のコードなので、店舗を変更したい場合は「★」の行を変えてください。
No.2様のようにどこかのセルに「店舗名」を入力しておき
それを参照する方が汎用性があると思います。m(_ _)m
No.2ベストアンサー
- 回答日時:
No1です。
以下のマクロを標準モジュールに登録してください。実行時にはF1へ店舗名を指定してください。
---------------------------------------------
Option Explicit
Public Sub 店舗集計()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow1 As Long
Dim row1 As Long
Dim row2 As Long
Dim wrow2 As Long
Dim dicT As Object
Dim key As Variant
Dim tempo As String
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")
maxrow1 = sh1.Cells(Rows.Count, 1).End(xlUp).Row 'sheet1 最終行を求める
tempo = sh2.Cells(1, "F").Value
If tempo = "" Then
MsgBox ("集計店舗が設定されていません")
Exit Sub
End If
'sheet2の2行目以降をクリア
sh2.Rows("2:" & Rows.Count).ClearContents 'Sheet2の2行目以降をクリア
row2 = 2
'sheet1の最終行まで繰り返す
For row1 = 2 To maxrow1
'集計対象店舗のみ行う
If sh1.Cells(row1, "B").Value = tempo Then
key = sh1.Cells(row1, "C").Value
'出荷日が最初の場合、出荷日、店舗、品番を登録する
If dicT.exists(key) = False Then
dicT(key) = row2
sh2.Cells(row2, "A").Value = sh1.Cells(row1, "C").Value
sh2.Cells(row2, "B").Value = tempo
sh2.Cells(row2, "C").Value = sh1.Cells(row1, "A").Value
row2 = row2 + 1
Else
'出荷日が既存の場合、品番を該当行に追加する
wrow2 = dicT(key)
sh2.Cells(wrow2, "C").Value = sh2.Cells(wrow2, "C").Value & "*" & sh1.Cells(row1, "A").Value
End If
End If
Next
MsgBox ("処理完了")
End Sub
最初試したときはあまりの希望通りに感動しました!
本当に助かったので感謝です!!
二人ともベストアンサーにしたいのですが
tatsu99さんはすぐに対応してくれたので感謝を込めてベストアンサーにしたいと思います。
No.1
- 回答日時:
マクロの一からの作り直しになりますが、
添付図のようにSheet2のF1のセルに集計対象の店舗名(この例では品川)を記入し、
その指定された店舗名について、集計するようにしてはいかがでしょうか。(添付図の黄色のセル)
そうすれば、他の店舗の集計をするときに、その都度、マクロを変更しなくて済みます。
それで良ければ、マクロの提供は可能です。
また、その場合、品番を連結する時にアスタリスク"*"を使用していますが、それで良いですか。(添付図の赤線で囲んだところ)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
直近の5個の平均を求めたい
-
[EXCEL]ボタン押す→時刻が表に...
-
【Excel関数】UNIQUE関数で"0"...
-
アクティブになっている行をマ...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
【EXCEL】連続データの個数を抽...
-
エクセルで特定の文字列が入っ...
-
Excel 時刻の並び替え
-
エクセルのセルに指定画像(.jpg...
-
チェックボックスをクリックし...
-
セルの色によって条件文をつけ...
-
エクセル マクロ オートフィ...
-
エクセル2016で時間を入力して...
-
電話番号の入力方式が違うデー...
-
このような複雑な表をワードで...
-
エクセルで、ポインタのある行...
-
Excel マクロで特定のセルに入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報
もちろんです!むしろその方がありがたいです!
品番を連結する際に使うのはアフタリスクでもなんでも大丈夫です。
よろしくお願いします。