• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロで(1))

エクセルマクロで複雑なデータ処理をする方法

このQ&Aのポイント
  • エクセルのマクロを使用して、複雑なデータ処理を行う方法について教えてください。
  • タイトル行とデータ行が交互に配置されているデータを、特定の条件で整理する方法について教えてください。
  • さらに、別のファイルに自動作成された日付をファイル名に反映させ、データの集計を行う方法についても教えてください。

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

  • ベストアンサー
  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.6

No.5です。以下の通り。 for i=cells(1,1).end(xldown).row to 3 step -1 If Cells(i, 1) = Cells(i - 1, 1) Then Cells(i, 1)="" End If If Cells(i, 5) = Cells(i - 1, 5) Then Cells(i, 5)="" End If next

その他の回答 (5)

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.5

No.4です。空白にする方法です。 for i=cells(1,1).end(xldown).row to 3 step -1 If Cells(i, 1) = Cells(i - 1, 1) Then Cells(i, 1)="" End If next

amino33
質問者

お礼

度々大変ありがとうございます。ただ試してみたところ例えば今回の例だと山田さんが数人いた場合でも1名の山田さんしか残らなくなってしまうのですが、例えば同じ山田さんでも顧客番号が異なる場合に顧客番号優先で番号が同じところ⇒同一人物の山田さんは1つだけ残して後は消すといった感じにしたいのですが可能でしょうか?さらにできれば日付のようなまったく同様に並んでしまうところも客番に合わせて消したいのですが... 例:    A   B   C   D    E 1 客番 名前 品名 数量 日付←タイトル 2 s001  山田 たこ  3  日付 3 s001  山田 たこ  2  日付 4 s001  山田 いか  1  日付 5 s003  山田 なす  1  日付 6 s005  鈴木 たこ  2  日付 7 s005  鈴木 なす  5  日付 8 s999  鈴木 いか  5  日付 ・ ・ ↑これがこんな感じになる↓ 例:    A   B   C   D    E 1 客番 名前 品名 数量 日付←タイトル 2 s001  山田 たこ  5  日付 3          いか  1  4 s003  山田 なす  1  日付 5 s005  鈴木 たこ  2  日付 6          なす  5  7 s999  鈴木 いか  5  日付 ・ ・ 度々すみませんが何卒宜しくお願いいたします。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.4

No.3です。以下の通りです。 If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 5) = Cells(i - 1, 5) Then Cells(i - 1, 6) = Cells(i - 1, 6) + Cells(i, 6)

amino33
質問者

お礼

大変ありがとうございました。無事できました!もしよろしければ同じ名前を一番上の一つだけ残して空白にする方法と2つ目の 別ファイル(食べ物<日付>.xls)をファイル名にできれば日付が入るように自動作成してA2から品名数の集計を貼り付ける はご存知でしょうか?何卒宜しくお願いいたします

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.3

No.1です。 名前の3行目、5行目は空白にしていませんが、次の通りです。 i = 3 Do Until Cells(i, 1) = "" If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2) Then Cells(i - 1, 3) = Cells(i - 1, 3) + Cells(i, 3) Rows("" & i & ":" & i & "").Delete Shift:=xlUp i = i - 1 End If i = i + 1 Loop

amino33
質問者

お礼

ありがとうございます。こちらの例でやってみたらバッチリうまくいきました。ただこの応用がどうしてもできないのですが、Eに品名、Fに数量といった場合どのようにすれば良いでしょうか? 何卒宜しくお願いいたします。

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

>なんかとても複雑なような気がしますが いえいえ簡単です。基本情報処理の試験の、コントロール・ブレーク 処理(普通は明細をそのままにして合計・小計を出したりする)のロジックの多少変形版です。パソコン以前はコンピュターはこんなことばかりしていたケースが多かったのではと思います。 個人別品別合計表など (1)処理をしやすくするために<A,B列でソートします。VBAでもできますが手操作でやります。ソートキーはA列+B列です。 (2)A、B列をあわせたものをキーとして考えます。 直前行と比較し、変われば出力、変わらなければ計数足しこみです。 Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet2") Set sh2 = Worksheets("Sheet3") '--- j = 2 m = sh1.Cells(2, "A") & sh1.Cells(2, "B") t = sh1.Cells(2, "C") d = sh1.Range("a65536").End(xlUp).Row MsgBox d '---- For i = 3 To d k = sh1.Cells(i, "A") & sh1.Cells(i, "B") If k = m Then t = t + sh1.Cells(i, "C") Else sh2.Cells(j, "A") = sh1.Cells(i - 1, "A") sh2.Cells(j, "B") = sh1.Cells(i - 1, "B") sh2.Cells(j, "C") = t sh2.Cells(j, "D") = sh1.Cells(i - 1, "D") t = sh1.Cells(i, "C") j = j + 1 End If m = k Next i sh2.Cells(j, "A") = sh1.Cells(i - 1, "A") sh2.Cells(j, "B") = sh1.Cells(i - 1, "B") sh2.Cells(j, "C") = t sh2.Cells(j, "D") = sh1.Cells(i - 1, "D") End Sub 佐藤 たこ 2 日付 佐藤 なす 5 日付 山田 いか 1 日付 山田 たこ 5 日付 第1行目は元シートの第1行目を貼り付けてください。 VBAでもできます。 同じ名前を空白にするのは、略。全行と同じ場合条件付き書式白色でも良い。 問題は山田・佐藤の順だが、別途何かのコード列がないと山田を先にできない。 後半も同じ考えでできるが略。

amino33
質問者

お礼

大変ありがとうございました。1つ目の方は無事できました!もしよろしければ同じ名前を空白(一番上の一つだけ残して、また山田・佐藤の順はいづれでも大丈夫です)にする方法と2つ目の 別ファイル(食べ物<日付>.xls)をファイル名にできれば日付が入るように自動作成してA2から品名数の集計を貼り付ける はご存知でしょうか?何卒宜しくお願いいたします。

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

マクロで可能です。 貴方のマクロの理解度がわかりませんので、 一から十までマクロを教えるのか、またはどういう風に処理したら いいのかの概要だけでいいのか、どちらでしょうか。

amino33
質問者

お礼

早速のご回答ありがとうございます。ド素人なのでマクロをそのまま教えていただければありがたいです。質問は例ですので実際にはさらにありますが、こちらのマクロが分かれば何とか応用できると思います。 何卒宜しくお願いいたします。

関連するQ&A

専門家に質問してみよう