• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字を変えてループ処理をする方法がわかりません)

ループ処理で複数の名前を変えて処理を行う方法

このQ&Aのポイント
  • エクセルマクロ初心者の方がループ処理で複数の名前を変えながら処理を行いたい場合、For~Next文を使用することで実現することができます。
  • 名前がJPN、CHN、KOR、HOZ、USAのように順に変わる場合、For文のカウンタ変数に名前のリストを設定し、処理内容にその変数を利用することで、スマートかつ効率的なコードを書くことができます。
  • これにより、名前が変わっても同じ処理を繰り返し実行することができ、重複や漏れの発生も防ぐことができます。是非、試してみてください。

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

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

他の方向けのお礼に掲示された内容を盗み見してる状態で、こちらとしては大変心苦しいのですが。 初心者さんが絶対一度、やらかしますが、変数名を""で囲っちゃ全くだめです。 sub macro1()  dim a as variant  for each a in array("JPN","CHN","KOR","HOZ","USA")   with worksheets("harituke").range("B1:B500")    .autofilter field:=1, criteria1:=a    activesheet.autofilter.range.offset(1).copy destination:=worksheets(a).range("A1")    .autofilter   end with  next end sub 寄せられた回答を「それぞれ」よく見て、回答同士でもどこが違ってるのか(けどどちらも正しい)キチンと把握して、正しく応用してください。

vesper580109
質問者

お礼

keithinさん ありがとうございました。うまくいきました。 >初心者さんが絶対一度、やらかしますが、変数名を""で囲っちゃ全くだめです 載せたコードのご指摘いただいた部分以外でも""で囲ってエラーになってしまった部分がたくさん発生し、""を外すことでうまくいきました。 ""で囲う、囲わない、で意味合いが全く異なってくること、しっかり勉強していきたいと思います。

その他の回答 (3)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

>No.1 この回答へのお礼 既に、No.3でkeithinさんが回答されていらっしゃいますように 折角の変数を""で囲むと単なる文字列(定数)という事になってしまいます。 願わくばNo.1の回答内容を再吟味してください。 No.1 私の回答は入門者レベルだと思います。 No.2 keithinさんの回答はVBAに精通された1段階レベルUPした内容だと思います。 非常に参考になりました。ありがとうございました。

vesper580109
質問者

お礼

xls88さん ありがとうございました。 いろんなご回答を頂けるので、逆にいろいろと試すことができています。 勉強になります。 ありがとうございました。

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

For Each Nextで配列の中身を直接ぐるぐる廻すのでも構いません。 sub macro1()  dim a as variant  for each a in array("JPN","CHN","KOR","HOZ","USA")  msgbox a  next end sub

vesper580109
質問者

お礼

keithinさん ご回答ありがとうございました。 得たい処理がまだうまくいっていませんが、まずはお礼申し上げます。 xls88さんのお礼コメントに記載いたしましたが、Valiant型を使用しているa(xls88さんの場合はarg)をfor~nextの間の処理に入れてみました。オートフィルタをかけ、指定したaのシートに貼り付ける部分でエラーになってしまいます。 書き方が悪いのかどうなのか、解決できていない部分です。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

配列にします。 Dim arg As Variant Dim i As Long arg = Array("JPN", "CHN", "KOR", "HOZ", "USA") For i = LBound(arg) To UBound(arg) MsgBox arg(i) Next

vesper580109
質問者

お礼

xls88さん ご回答ありがとうございます。 得たい結果が得られていないのでループ処理がうまくいっているのかどうかまだ分かりませんが、まずはお礼申し上げます。 Variant型を使用しているので、argを処理中のどの位置に挿入しても処理が回ると思っているのですが、うまくいきません。 下記のように、"harituke"シートのB列にargが存在していて、オートフィルタをかけた後 事前に準備されている各argのWorksheetsに貼り付けていく作業をしています。 すると .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("arg").Range("A1") でエラーになってしまい、得たいループ処理が初めでつまづいてしまっています。 下記ソースをForとNextの間に入れるだけではうまくいかないのでしょうか。 Sheets("harituke").Activate With Worksheets("harituke").Range("B1:B500") .AutoFilter Field:=1, Criteria1:="arg" .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("arg").Range("A1") .AutoFilter Worksheets("arg").Range("1:1").Delete End With