売上集計表があり、A列に全商品のコードが表示されてます。
毎日の売上商品のデータを商品コード別に数量を入力して同じ内容のセルの行の位置を合わせる作業を毎日行っています。
毎日の売上データはエクセルで集計されたデータを貼り付けて行っています。これをなんとかVBAで処理したいのですが、どうしたらいいのかわかりません。
内容としてはA列に全商品の商品コードが既に入力されています。
月のはじめは、B列とC列に一日の集計データそのまま貼り付けます。
A列の商品コードと同じ商品コードの行に合うまで空白のセルを挿入していきます。
次の日は、D列とE列、その次はF列とG列と右に貼り付けしていきます。
商品コードは約3000件、毎日の集計データ数は約500件です。
どうか教えてください。
完成例)
A列 B列 C列 D列 E列 F列 G列 H列 I列
商品コード 10/1分 10/2分 10/3分 10/4分・・・続く
商品コード 数量 商品コード 数量 商品コード数量
CZ1.000 CZ1.000 10 CZ1.000 20
CZ1.005 CZ1.010 15 ←セルの挿入で
CZ1.010 CZ1.010 30 CZ1.020 30 下げる作業を
CZ1.015 CZ1.030 10 毎日行ってます。
CZ1.020 CZ1.020 11 CZ1.020 20 CZ1.040 40
CZ1.025
CZ1.030 CZ1.030 11 CZ1.030 10
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちわ
試してみて
Sub 商品コード配置()
Dim Dic商品コードと行 As Object
Dim 配列商品コード数量, 編集前商品コード数量
Dim 最終行 As Long
Dim i As Long, j As Long, k As Long
Dim 商品コード As String
Sheets("Sheet3").Activate '実際のシート名に変更
最終行 = Cells(Rows.Count, "A").End(xlUp).Row
配列商品コード数量 = Cells(3, "A").Resize(最終行 - 2, 1).Value
Set Dic商品コードと行 = CreateObject("Scripting.Dictionary")
For i = 1 To 最終行 - 2
Dic商品コードと行.Add 配列商品コード数量(i, 1), i
Next i
For i = (31 * 2) To 2 Step -2 '最大31日 一日二列
ReDim 配列商品コード数量(1 To 最終行 - 2, 1 To 2)
k = Cells(Rows.Count, i).End(xlUp).Row
If k > 2 Then
編集前商品コード数量 = Cells(3, i).Resize(k - 2, 2).Value
For j = 1 To k - 2
商品コード = 編集前商品コード数量(j, 1)
If 商品コード <> "" Then
If Dic商品コードと行.exists(商品コード) Then
配列商品コード数量(Dic商品コードと行.Item(商品コード), 1) = 商品コード
配列商品コード数量(Dic商品コードと行.Item(商品コード), 2) = 編集前商品コード数量(j, 2)
Else
MsgBox "商品コード " & 商品コード & " に間違いがあります。"
End If
End If
Next j
Cells(3, i).Resize(最終行 - 2, 2).Value = 配列商品コード数量
End If
Next i
Set Dic商品コードと行 = Nothing
End Sub
すぐに回答いただきまして有難うございます。
やりたいことにも、コード違いの対処まで
考えていただき、大変助かりました。(^▽^)♪
No.2
- 回答日時:
3行の一番右に値がある列とその1つ左の列を対象に並び替えます。
あくまでもサンプルですのでエラー処理等は入れていません。あしからず。
Sub Sample()
Dim nData(), nPos()
Dim nRight, nDown, i
'3行目一番右の列を対象
nRight = Cells(3, Columns.Count).End(xlToLeft).Column
nDown = Cells(Rows.Count, nRight).End(xlUp).Row
ReDim nData(nDown - 3)
ReDim nPos(nDown - 3)
For i = 0 To (nDown - 3)
'移動先の行をワークシート関数のMatchで調べる
nPos(i) = WorksheetFunction.Match(Cells(i + 3, nRight - 1), Range("A:A"), 0)
nData(i) = Cells(i + 3, nRight)
Next i
'元のデータを消す
Range(Cells(3, nRight - 1), Cells(nDown, nRight)).ClearContents
For i = 0 To (nDown - 3)
'移動先に代入
Cells(nPos(i), nRight - 1) = Cells(nPos(i), 1)
Cells(nPos(i), nRight) = nData(i)
Next i
End Sub
ご回答いただき有難うございます。
やりたいことが、とても簡単に出来るようになりました。
大変、とっても助かりました。(^▽^)♪
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) チームごとにどの商品を何個希望しているか数量を算出したいです。 A列(A2~A265)に各チーム名が 3 2023/07/18 18:46
- Visual Basic(VBA) 【VBA】複数行あるカンマ区切りのデータを全て縦に一列に並べたい 5 2022/04/13 17:03
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) ある文字を含む際に、値を返す数式についてです 5 2022/08/28 16:58
- Excel(エクセル) エクセル 関数について 4 2022/08/05 11:03
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) vbaマクロについて シート1のA列にある商品コードが シート2のB列にある商品コードに該当する場合 2 2023/05/17 13:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
chatgptでつくってもらったコー...
-
Gitのクローンについて
-
パイソンプログラム
-
pythonにてseleniumを使うも、...
-
ACCESSで、履歴事項を管理する...
-
ExcelのVBAコードについて教え...
-
UWSCでMOUSEORG関数が上手く処...
-
Excelの VBA 基準と...
-
Excelシート上で右クリックがで...
-
高速なロジックは?
-
ExcelのVBAコードについて教え...
-
VB6で読み上げをしたい
-
変数名「cur」について
-
Exel VBA 別ブックから該当デ...
-
ユーザーフォームに2つのコン...
-
課題なのですがどなたかコード...
-
フィルターかけた後、重複を除...
-
HTML電卓で1文字消す方法
-
1日に1人がこなせるプログラム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
COBOLの文法
-
VBAでファイルオープン後にコー...
-
Nullの使い方が不正です。
おすすめ情報