• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでのデータ並び替え、条件判断について)

VBAでのデータ並び替え、条件判断について

このQ&Aのポイント
  • Excel2003、VBA6.5でマクロに挑戦しているVBA初心者です。
  • Sheet1に貼り付けられたデータを、精査(並び替え、条件判断)し、結果をSheet2に出力させたい。
  • 具体的な処理フローを示しながら、シンプルな形でVBAマクロを作成したいと思っています。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

マクロは標準モジュールに書きます。 方法1:エクセルはエクセルらしく使います sub macro1()  dim r as long  r = worksheets("Sheet1").range("A65536").end(xlup).row  with worksheets("Sheet2")   .range("A:A").numberformatlocal = "MM/DD"   .range("D:D").numberformatlocal = "h:mm"   .range("A2:A" & r) = date   .range("B2:B" & r).formula = "=Sheet1!B2&Sheet1!C2"   .range("C2:C" & r) = "固定値2"   .range("D2:D" & r).formula = "=IF(Sheet1!D2=""AM"",TIME(9,0,0),IF(Sheet1!D2=""PM"",TIME(13,0,0),IF(Sheet1!D2=""PM2"",TIME(15,0,0),"""")))"  end with '以下は必要に応じて  with worksheets("Sheet2")   .range("B2:B" & r).value = .range("B2:B" & r).value   .range("D2:D" & r).value = .range("D2:D" & r).value  end with end sub #補足 >必要になるデータだけ、Sheet1で検索した結果をSheet2に埋めて 詳細がないため盛り込んでいません。 方法2:エクセルを使いたくない人向けの書き方です sub macro2()  dim r as long, i as long, res as variant  r = worksheets("Sheet1").range("A65536").end(xlup).row  worksheets("Sheet2").range("A:A").numberformatlocal = "MM/DD"  worksheets("Sheet2").range("D:D").numberformatlocal = "h:mm"  for i = 2 to r   worksheets("Sheet2").cells(i, "A") = date   worksheets("Sheet2").cells(i, "B") = worksheets("Sheet1").cells(i, "B") & worksheets("Sheet1").cells(i, "C")   worksheets("Sheet2").cells(i, "C") = "固定値2"   select case worksheets("Sheet1").cells(i, "D")   case "AM"    res = timeserial(9, 0, 0)   case "PM"    res = timeserial(13,0,0)   case "PM2"    res = timeserial(15,0,0)   case else    res = ""   end select   worksheets("Sheet2").cells(i, "D") = res  next i end sub #補足 エクセルのワークシート上には既に「配列」っぽくデータが配置済みです。 もちろん具体的な状況に依りますが,わざわざメモリに値を転送してから計算するより,直接セルから値を取り出して演算したり,直接転記した方が少し高速な場合もあります

ASURA-RVF400R
質問者

お礼

keithin様 ご回答いただき、ありがとう御座います。 方法1を使い、データ項目を増やしたりして(本来は項目が20程あるのです)テストしていますが順調に動いており、厚く御礼申し上げます。 もし可能でしたら、追加で1つだけお教えください。 方法1の、 .range("B2:B" & r).formula = "=Sheet1!B2&Sheet1!C2" のデータB+データCの結合の部分で、データBとCの間にスペースを入れるように変更を行ってみるべく、 "=Sheet1!B2&" "&Sheet1!C2" 等、幾つか自分なりに調べてみた結果を試したのですが、 コンパイルは問題なく通るものの、シートにはNULLやVALUE 表示になってしまいます。 表示されるような方法はあるのでしょうか。 (方法2なら、cells(i, " ")とかをBとCのデータを表示される間に入れてやることで解決できそうな気はするのですが…

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

.range("B2:B" & r).formula = "=Sheet1!B2&"" ""&Sheet1!C2" といった具合で,必要な書きぶりは前回回答でD列に式を入れさせているマクロのほぼそのままです。 追加ご質問から1日置いてもそのまま解決されていないところを見ると,見直し等されていない様子で大変残念です。 また,新しいマクロの記録で実際に「セルに必要な式を記入する」という操作をマクロに録ってみるのも,正しい書きぶりを知るよい手がかりなので,参考になさってみてください。

ASURA-RVF400R
質問者

お礼

すみません、別件の仕事で確認が滞っていました。 スペースについてはお陰様で無事に解決しております。 もっとコードをいじってみて、お教えいただいた事を吸収できるよう、精進していきたいと思います。 本当にありがとう御座いました。

関連するQ&A

専門家に質問してみよう