• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vba 記述をスマートにしたい)

VBA記述を効率化したい

このQ&Aのポイント
  • VBAの記述を簡略化したいです。同じ処理を2回しているので、効率化したいです。
  • ExcelのVBAの処理を簡略化したいです。2つのシートで同じ処理を行っているので、スマートにできる方法を教えてください。
  • ExcelのVBAで同じ処理を2回しているので、コードを短くしたいです。どなたか効率化の方法を教えてください。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

この2つのルーチンでどこが違って どこが似たよう物なのかを考えましょう myrngvとmyrngYKが転記先のセル myrialzとmyXBrialzが転記元のセルおよび検索対象 転記先のセル番地が異なっている とこの3つの用件を満たせば サブルーチン(プロシージャ)化が出来そうです 転記先セル、転記元セルは Rangeオブジェクトで受ければよさそうで 異なるセル番地は 配列でその番地を与えればいいでしょう Sub TransferMacro( rTrg as range, rSrc as Range, nRows()as integer)   dim j as Integer, myRow as Long   dim c as Range, myhin as String, firstaddress as String   j = 3   Do     j = j + 1     myhin = rTrg.Cells(j, 1).Value     If myhin = "" Then Exit Do     Set c = rSrc.Find(what:=myhin, Lookat:=xlWhole)     If Not c Is Nothing Then       firstaddress = c.Address       Do         myrow = c.Row         rTrg.Cells(j, nRows(0)) = rSrc.Cells(myrow, 7).Value         rTrg.Cells(j, nRows(1)) = rSrc.Cells(myrow, 8).Value         rTrg.Cells(j, nRows(2)) = rSrc.Cells(myrow, 3).Value         ' 右辺のCells(myrow, 7).Value,Cells(myrow, 8).Valueが         ' アクティブシートのセルを使うのでしたら         ' 『rSrc.』を消してください …         rTrg.Cells(j, nRows(3)) = rSrc.Cells(myrow, 3).Value + _           rSrc.Cells(myrow, 7).Value - rSrc.Cells(myrow, 8).Value         Set c = rSrc.FindNext(c)       Loop Until firstaddress = c.Address     End If   Loop End Sub といった具合で呼び出し元を dim nRows(3) nRows(0) = 9 nRows(1) = 11 nRows(2) = 13 nRows(3) = 5 TransferMacro myrngv, myrialz, nRows nRows(0) = 8 nRows(1) = 10 nRows(2) = 12 nRows(3) = 6 TransferMacro myrngYK, myXBrialz, nRows といった具合でしょう # 字下げに全角スペースを使用しています 適宜置換してください

miruchoko
質問者

お礼

ありがとうございます。 大変参考になりました。

すると、全ての回答が全文表示されます。

関連するQ&A