• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAで困っています。)

エクセルVBAで困っています。

このQ&Aのポイント
  • エクセルでSheet1でSheet2に各銀行の出納帳を作りそこから各項目ごとに別Sheetに振り分けたいと思っています。
  • 又、全てのSheetで1行目には銀行名や項目名を入れたいので2行目から日付、内容・・・といったように入力したいです。
  • どこをどう変更したらよいのか分かりません。自分がわかる範囲で(適当ですが)挑んでみたのですが、私自体VBAについて全く無知のため何が何だかサッパリです。どなたか教えて頂くことはできないでしょうか。

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

  • ベストアンサー
回答No.4

個人的には項目が増えても大丈夫な様に 最初から作ってないのが駄目なんじゃないかって気がするけど。 組み方も若干あれだし。 変えるなら以下の部分を変えればいいと思う。 変更前 'シートを作る 変更前 For i = 1 To 3 変更前 For j = 1 To 5 変更前 Cells(1, j) = title(j)  ↓ 変更後 'シートを作る 変更後 For i = 1 To UBound(classify) 変更後 For j = 1 To 5 変更後 Cells(2, j) = title(j) ※UBoundは配列の最大値が返ってくるから  今後項目が増えても変える必要が無くて済む。素直に9でも良い ※あとヘッダをここで2行目に貼る様に変える。 変更前 For i = 1 To 3 変更前 keyword = classify(i)  ↓ 変更後 For i = 1 To UBound(classify) 変更後 keyword = classify(i) ※上と同じ。こっちも9でも良し 変更前 Range("A2").Select 変更前 ActiveSheet.Paste 変更前 Range("B2:B" & 2 + (findLower - findUpper)).Delete Shift:=xlToLeft  ↓ 変更前 Range("A3").Select 変更前 ActiveSheet.Paste 変更前 Range("B3:B" & 3 + (findLower - findUpper)).Delete Shift:=xlToLeft ※データを貼ってる所だからここを3行目に変える。 最後に以下の文だけど >又、全てのSheetで1行目には銀行名や項目名を入れたいので 何を入れるかが分からないのでアドバイスのしようがない。 銀行名や項目名が固定なのか、どこかのセルにあるものなのかとかさ。

その他の回答 (3)

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

長いコードをコピペして、全体的に何をやっているかの詳細の説明も無く、丸投げで、読者や回答者にコードを読み解いて回答を呉れというのは、やりすぎと思う。 ある課題をVBAで処理する場合も、色々な処理方法があり、個人の好みや実力を反映していて、読み解くのに時間がかかる場合が多いのだ。今回は新たな作り直しは対象外と思うが、質問のコードは余りベテランの感じが伝わってこない。 データ例も挙げてないので、判りにくい。 何かもっとすっきりしたやり方(処理手順・ロジック)もあるような気もする。 >VBAについて全く無知のため VBAの経験が無いものが、どうしてこういうことを、自分でやると言うことになるのか。 業者にでも頼むほか無いでしょう。 仕事で使うものなのに、内容が判らないものが触って、ある場合は結果がおかしくて、見過ごしていたなどがあったりしたらどうするのか。すみません、ですまない事態も考えられる。 篤志家(VBAが出来る社員が自発的にVBAで便利にした)によるVBAでの業務処理などは、良いように見えるが、引継ぎの際に、大きな問題を抱えることが宿命である。質問者の次もこの問題から逃れられない。 ーー どうしてもやるなら、質問者への、提案・示唆の1つは、コードを印刷して、コードの各行の横にそのコード1行で何を(どういう処理を)して居るか、書き上げてみてはどうかな。一部の行にはコメントがあるが全行に入れてみる。 判らない行には印をして、質問するとか。 特にコード内で数字の定数になっている部分は、その数字が何の意味なのか考えて・調べて認識する。 そして、各行の処理の意味が判ったら、処理概要の塊と順序を箇条書き的に整理する。 質問者が処理内容を掴んでおく必要があると思うから。 (昔はフローチャートという、処理の図示を勧められたが)

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

誤記?: >エクセルでSheet1でSheet2に各銀行の出納帳を作りそこから… 訂正: エクセルでSheet1「と」Sheet2に各銀行の出納帳を作りそこから… とりあえず今の状況だと,ピボットテーブルレポートでの整理もちょっとやりにくいです。(全く無理ではないですが) ややイミフメイ: >全てのSheetで1行目には銀行名や項目名を入れたいので2行目から日付、内容・・・といったように入力したい こういう事? 会費のシートの「1行目」,具体的に言えば「A1セル」に「銀行名1」,B1セルに「会費」と記入し, 2行目から銀行1シートからデータを転記する。2行目はタイトル行,3行目から実データ。 しばらく銀行1のデータがコピーできたら,改めて「銀行名2」「会費」とAB列に記入し, その下の行に続けて銀行2シートから転記する。タイトル行を1行記入し,実データが続く。 つまり今のマクロだと銀行1,2のデータが混在してしまうのが困っているので,分けて並べたい? それともこういう事? 会費のシートの「1行目」は言い間違いで「A列に」銀行名をだーーーっと列記し,「B列から」日付,内容・・・といったように入力したい 作成例: sub macro1()  dim Banks as variant  dim LastRows() as variant  dim Classify as variant  dim i as long, j as long ’データ初期化(必要ならドンドン追記すればよい)  banks = array("銀行1シート名","銀行2シート名")  classify = array("会費","会議費","事務費","事業費","研修費","報償費","慶弔費","予備費","積立金")  redim lastrows(ubound(banks))  for i = 0 to ubound(banks)  lastrows(i) = worksheets(banks(i)).range("A65536").end(xlup).row  next i ’所定の「内容」ごとに繰り返す  for i = 0 to ubound(classify) ’振り分け先シートの整備  on error goto errhandle  worksheets(classify(i)).select  on error goto 0  cells.clearcontents  range("B1") = "内容"   ’コピー  for j=0 to ubound(banks)   worksheets(banks(j)).range("B2") = "内容"   range("A65536").end(xlup).offset(1) = banks(j)   range("A65536").end(xlup).offset(0, 1) = classify(i)   worksheets(banks(j)).range("A2:E" & lastrows(j)).advancedfilter _    criteriarange:=range("B1:B2"), _    action:=xlfiltercopy, _    copytorange:=range("A65536").end(xlup).offset(1)  next j ’掃除  range("1:1").delete  next i exit sub errhandle: ’シートがなければ新調する  worksheets.add after:=worksheets(worksheets.count)  activesheet.name = classify(i)  resume end sub #補足 今のマクロで日付で並べ替えたりコピー後にB列を削除しているのは割愛している ご説明では「項目」と称しているが,実物のエクセルでは「内容」が正しいとしている 説明が無いが,各銀行シートは2行目にラベル行(「日付」や「内容」etc),3行目から実データ(日付や数値)としている 今のマクロと同じ動作で,貼り付け先シートにデータが記入済みでも追記せず1行目からデータを貼り直している #実はホントはこうしたかったんです最初から作り直してくださいは無しでお願いします。 その場合は,今度はホントの条件を挙げてまた「新しいご相談で投稿し直して」くださいね。(とお願いしても聞く耳持たないヒトがすごく多いんで)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

毎回全データを複写して処理しているので、データが増えてくると重そうですね。 For i = 1 To 3が二カ所ありますが、この3=項目数ですので、それぞれ9に直せば動作すると思います。 ピボットテーブルで複数シートのデータを処理できるそうなので、それで十分な気もします。シート毎には分かれませんが、どうせ人間が複数シートの内容を同時に見るには、印刷せざるを得ないと思いますので。ご参考まで。 http://www.atmarkit.co.jp/fwin2k/win2ktips/407pivokushi/pivokushi.html

関連するQ&A