A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
おじゃまします
> マクロを使用して作成する場合でも構いません。
という事なので、考えてみました。
以下に記述しますが、変更場所を局所化してみました。
変更する場所は
vA = Array( _
Array("取引先"), _
Array("売上", "売上", ""), _
Array("売上(1)~(3)", "売上(1),売上(2),売上(3)", ""), _
Array("売上(1)~(3)-(4)", "売上(1),売上(2),売上(3)", "売上(4)"), _
Array("売上(2)", "売上(2),売上(3),売上(4)", ""), _
Array("売上(3)", "売上(3),売上(4)", ""), _
Array("売上(4)", "売上(1),売上(2),売上(3),売上(4)", "") _
)
の所だけです。
vA = Array( _
Array("取引先"), _
部分は固定で、それ以降環境に合わせて変更していきます。
意味的には
Array("売上(1)~(3)", "売上(1),売上(2),売上(3)", ""), _
なら、列見出しは「売上(1)~(3)」で、
「売上(1)」,「売上(2)」,「売上(3)」の3つを加算
(名称に出てくる文字列をカンマ区切りで)
その後の "" で、減算するものをカンマ区切りで・・・ なければ ""
Array("売上(1)~(3)-(4)", "売上(1),売上(2),売上(3)", "売上(4)"), _
は、売上(1),売上(2),売上(3)を加算して、売上(4)を減算
提示された図での設定では、
vA = Array( _
Array("取引先"), _
Array("売上", "売上", ""), _
Array("売上(2)", "売上(1),売上(2),売上(3)", "") _
)
とでも設定すれば良いのでしょうか?
※※ 投稿で○数字がカッコ数字に変わるみたいです
Public Sub Samp1()
Dim dic As Object, dicW As Object
Dim vA As Variant, vD As Variant
Dim vK As Variant, v As Variant
Dim i As Long, j As Long, k As Long
vA = Array( _
Array("取引先"), _
Array("売上", "売上", ""), _
Array("売上(1)~(3)", "売上(1),売上(2),売上(3)", ""), _
Array("売上(1)~(3)-(4)", "売上(1),売上(2),売上(3)", "売上(4)"), _
Array("売上(2)", "売上(2),売上(3),売上(4)", ""), _
Array("売上(3)", "売上(3),売上(4)", ""), _
Array("売上(4)", "売上(1),売上(2),売上(3),売上(4)", "") _
)
Application.ScreenUpdating = False
Set dicW = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(vA)
k = 1
For j = 1 To 2
For Each vK In Split(vA(i)(j), ",")
v = dicW(vK)
If (IsArray(v)) Then
ReDim Preserve v(UBound(v) + 1)
Else
ReDim v(0)
End If
v(UBound(v)) = i * k
dicW(vK) = v
Next
k = -1
Next
Next
Set dic = CreateObject("Scripting.Dictionary")
vD = Range("A2", Cells(Rows.Count, "A").End(xlUp)).Resize(, 4)
For i = 1 To UBound(vD)
If (Not dic.Exists(vD(i, 1))) Then
dic.Add vD(i, 1), CreateObject("Scripting.Dictionary")
End If
vK = dicW(vD(i, 2))
If (IsArray(vK)) Then
For j = 0 To UBound(vK)
k = Abs(vK(j))
v = dic(vD(i, 1))(k)
If (Not IsArray(v)) Then ReDim v(1)
If (vK(j) > 0) Then
v(0) = v(0) + vD(i, 3)
v(1) = v(1) + vD(i, 4)
Else
v(0) = v(0) - vD(i, 3)
v(1) = v(1) - vD(i, 4)
End If
dic(vD(i, 1))(k) = v
Next
End If
Next
Worksheets.Add
Cells(1, 1) = vA(0)(0)
For i = 1 To UBound(vA)
With Cells(1, i * 2)
.Value = vA(i)(0)
.Offset(, 1).Value = "販売数"
End With
Next
i = 2
For Each vK In dic.Keys
Cells(i, 1).Value = vK
For Each v In dic(vK).Keys
Cells(i, v * 2).Resize(, 2) = dic(vK)(v)
Next
i = i + 1
Next
With Cells(1.1).CurrentRegion
With .Rows(1)
.Interior.ColorIndex = 15
.HorizontalAlignment = xlCenter
End With
.Columns(1).HorizontalAlignment = xlCenter
.Borders.LineStyle = xlContinuous
.EntireColumn.AutoFit
End With
Set dicW = Nothing
Set dic = Nothing
Application.ScreenUpdating = True
End Sub
※ 処理対象はアクティブシートで、結果はシートを追加して表示します。
※ 不具合/不都合あれば、修正してください。
No.3
- 回答日時:
続けてお邪魔します。
No.2の補足
>画像ではSheet2のB2セルに
>=SUMIFS(Sheet1!C:C,Sheet1!$A:$A,$A2,Sheet1!$B:$B,$B$1)
>こちらの条件で「売上」とすると、データ一覧から「売上」だけではなく、「売上高」を合算してしまいます。
前回の数式はSheet2のB1セルの項目名(売上)というものを
SUMIFS関数の「条件範囲2」の「条件2」をSheet1のB1セル(項目名の「売上」)にしていました。
もしかして、Sheet2のB1セル項目名が「売上高」になっていませんか?
それはさておき、「売上」だけを表示したい場合はSheet2のB2セルの数式を
=SUMIFS(Sheet1!C:C,Sheet1!$A:$A,$A2,Sheet1!$B:$B,"売上")
としてみてください。
※ アップされている画像通りにSheet2の数値が表示されるためには
Sheet1のB列が「売上」となっている行だと判断しての数式です。
(売上-A・売上-B などは除外します)
今度はどうでしょうか?m(_ _)m
ご回答ありがとうございます。
確認したところ、セル項目名が「売上高」となっていました。。
無事、データ抽出することが出来ました!
ありがとうございますm(_ _)m
No.2
- 回答日時:
No.1です。
補足の
>「売上-○」とつくものが30個以近くある場合は・・・
について、
とりあえず前回の画像でSheet2のD・E列だけでやってみました。
一番簡単なのは作業用の列を設ける方法だと思います。
↓の画像でSheet2に集計したいデータをG列に羅列しておきます。
そしてSheet1の作業列F2セルに
=IF(COUNTIF(Sheet2!G:G,B2),1,"")
という数式を入れフィルハンドルでずぃ~~~!っと下へコピー!
これを利用して、Sheet2のD2セルに
=SUMIFS(Sheet1!C:C,Sheet1!$A:$A,$A2,Sheet1!$F:$F,1)
という数式を入れ、となりのE2セルまでコピー → そのまま下へコピー!
これで画像のような感じになります。
※ 今回はSheet2のA・B列には手を加えていませんが、
(A・B列はSheet1の「取引先」別の「売上」と「販売数」だけを表示すれば良いと思いますので)
A・B列も同様のコトをしたい場合は
作業列を増やすのが簡単だと思います。
※ 作業列が目障りであれば非表示にしておきます。
こんな感じではどうでしょうか?m(_ _)m
この回答への補足
ご回答ありがとうございます。
何度も申し訳ありません。。
もう1点確認させてください。
>画像ではSheet2のB2セルに
>=SUMIFS(Sheet1!C:C,Sheet1!$A:$A,$A2,Sheet1!$B:$B,$B$1)
こちらの条件で「売上」とすると、データ一覧から「売上」だけではなく、「売上高」を合算してしまいます。
こちらは「売上」と完全に一致するデータのみ抽出することは可能でしょうか?
No.1
- 回答日時:
こんばんは!
画像のある「売上(2)」の右側列「販売数」は何を表示させれば良いか判らないのですが、
とりあえず、売上(1)~売上(3)の「販売数」を表示するようにしてみました。
↓の画像で左側が元データの「Sheet1」とし、右側の「Sheet2」に表示するとします。
画像ではSheet2のB2セルに
=SUMIFS(Sheet1!C:C,Sheet1!$A:$A,$A2,Sheet1!$B:$B,$B$1)
という数式を入れ、隣りのC2セルまでフィルハンドルでコピー!
続いてD2セルに
=SUM(SUMIFS(Sheet1!C:C,Sheet1!$A:$A,$A2,Sheet1!$B:$B,"売上(1)"),SUMIFS(Sheet1!C:C,Sheet1!$A:$A,$A2,Sheet1!$B:$B,"売上(2)"),SUMIFS(Sheet1!C:C,Sheet1!$A:$A,$A2,Sheet1!$B:$B,"売上(3)"))
という数式を入れこれも隣りのE2セルまでコピー!
最後にB2~E2セルを範囲指定 → E2セルのフィルハンドルで下へコピーすると
画像のような感じになります。
※ 実際の計算がお示しの画像の数値と異なるので、間違っていたらごめんなさいね。m(_ _)m
この回答への補足
ご回答ありがとうございます。
大変助かりましたm(_ _)m
追加でご質問よろしいでしょうか?
名称の「売上-A」「売上-B」etc の合計値の計算式ですが、「売上-○」とつくものが30個以近くある場合は、上記のような計算式ですと、長くなってしまうので、該当する対象リストを作成し、参照し、集計対象とする方法はありますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- CPU・メモリ・マザーボード メモリの増設について 6 2022/12/28 06:41
- Excel(エクセル) エクセルで年月ごとの売り上げを集計する方法を教えてください 7 2022/06/01 17:06
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- Excel(エクセル) vba 同じブック内での転記について 4 2023/01/15 14:42
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) EXCELピボットテーブル関数について 2 2023/04/10 20:35
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- Visual Basic(VBA) 日付を重複させずに数えたい 4 2022/12/04 16:26
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
RTKPOSTのファイル生成について
-
正規表現で複数マッチ条件で悩...
-
プログラミング
-
プログラミング ソースコード
-
Pythonって何を意識した言語な...
-
chatGPTで次々と質問をしていく...
-
windowsでテキストファイルの各...
-
最新のプログラム言語を学ぶに...
-
Webサイト内に埋め込んだmp4動...
-
vba クリップボードクリアにつ...
-
家庭のパソコンで Python の 環...
-
Google ColaboでGUI作成
-
プログラミングの雑談とかでき...
-
プログラムの素朴な質問です 分...
-
Android Studio 難しい
-
昔のパソコン少年の武勇伝「店...
-
sublimit textっていうエディタ...
-
Arduinoに関する質問
-
フリーランスのエンジニアって...
-
Powershellとコマンドプロンプト
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
chatGPTで次々と質問をしていく...
-
昔のパソコン少年の武勇伝「店...
-
スカラーのベクトル微分
-
ハッシュテーブル(連想配列)が...
-
最新のプログラム言語を学ぶに...
-
pythonにてseleniumを使うも、...
-
Windowsのアプリ開発ってなんの...
-
vba クリップボードクリアにつ...
-
Google ColaboでGUI作成
-
sublimit textっていうエディタ...
-
フリーランスのエンジニアって...
-
ExcelVBAでFormulaR1C1を列範囲...
-
matplotlibで任意の角度の円弧...
-
そのまま使っただけなのに・・...
-
家庭のパソコンで Python の 環...
-
初心者powershellのPS1ファイル...
-
Webプログラムってネイティブア...
-
httpリクエストの送り元の特定
-
プログラミングで例えばゲーム...
-
rpa化する言語としてら何があり...
おすすめ情報