• ベストアンサー

VBAのfor...next構文で i = A to Z としたい。

VBAでfor...next構文で通常  for i = 1 to 100 などとしますが、それをA~Zまでとする場合どのようにすればよいでしょうか?

  • e-l
  • お礼率45% (158/349)

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

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

#1です。 ごめんなさい。先のマクロに致命的なミスがありました。 正しくは Dim c as String For i = 0 To 25   c = Chr(i + 65) です。お詫びして訂正します。 さて c = Chr(i + 65) の解説ですが、 Chr は、与えられた文字コードに該当する文字を返す関数です。 半角大文字の「A」のコードは65です。 「i」は0から25までの値をとりますので、「i+65」とするわけです。 ちなみに、 Dim c as String For i = 65 To 90   c = Chr(i) としても良いでしょう。

e-l
質問者

お礼

有難う御座います。大変分かり易いご説明有難う御座いました。

その他の回答 (3)

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.3

文字には、コンピュータの中で数字が割り当てられています。半角文字の場合はたいてい”アスキーコード”がつかわれています。 Aは65, Bは66...のようになっています。 Chrは、整数を渡すと、(その数をアスキーコードとみなして)、対応する文字を返す関数なので、forでiを0から使えば、i+65 はAに対応する数字になります。 Dim c as String For i = Asc("A") To Asc("Z")   c = Chr(i)   : としたほうがわかりやすいかも。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

文字には文字コードが割り当てられていますので、そちらを利用します。 IT用語辞典 e-Words : ASCII文字コード http://e-words.jp/p/r-ascii.html でいうと、A(65)~Z(90)まで整数iをループさせ、Chr関数で整数iのASCIIコードを文字に変換して文字列cに格納すると言う処理です。

参考URL:
http://e-words.jp/p/r-ascii.html
noname#148473
noname#148473
回答No.1

for i = 1 to 100 の「i」は、Integer型と決まっていますので、文字型である「A~Z」にはできません。 Dim c as String For i = 0 To 2   c = Chr(i + 65) として、「i」のかわりに「c」を使うのでは駄目なのでしょうか?

e-l
質問者

補足

有難う御座います。文字列が使えないことは分かりました。 Dim c as String For i = 0 To 2   c = Chr(i + 65) c = Chr(i + 65) この意味が分からないので教えて下さい。

関連するQ&A

  • For next使う場合、next iはできない?

    vbsでFor next使う場合、next iはできないのですか? for i = 1 to 2 msgbox "" next i をすると "ステートメントの末尾が不正です"800A401 になります。 しかし for i = 1 to 2 msgbox "" next にすると、問題ないです。 VBAではnext iでも実行できるけどVBSではだめなのでしょうか? 理由を教えてください。

  • excel VBA For ~Next構文について

    excel VBA For ~Next構文についての質問です。 以下のようなマクロがあります(実際はもう少し複雑なことをやっていますが)     For i = 4 To 178      Cells(i, 16).FormulaR1C1 = "=RC[-2]-'" & Lm & "'!RC[-2]"     Next i これに「もし、『Cells(i, 1)』が空白なら、この処理は行わずに、次の行にすすめ」という指示を加えたいのですが、こんな簡単なこと(?)で行き詰ってしまっています。 とりあえず以下のように修正をしてみたのですが・・・    For i = 4 To 178    If Cells(i, 1) = "" Then GoTo ワープ:    Cells(i, 16).FormulaR1C1 = "=RC[-2]-'" & Lm & "'!RC[-2]"    ワープ:   Next i  これで一応こちらの求めている処理はできたのですが、もっと簡単に(もしくはすっきりと) できる方法はないでしょうか?  以上、よろしくお願いいたします。   

  • VBAのFor構文で

    質問させていただきます。 IF textBox1.value = "" then End If のように、VBAのテキストボックスが空白の場合に起動する構文を作ろうと考えているのですが、 このテキストボックスの数が多いので、どうにかして短く出来ないかと考えています。 VBAのテキストボックスを直接For構文で変更する事は可能なのでしょうか? 例えば For i = 1 to 20 IF textBox(i).value = "" then End If Next i 上記のような構文では実際に動かしたときにtextBoxの指定がされていないのでエラーが出てしまいます。 やはり、各テキストボックスごとに構文を作らなければならないのでしょうか? もし可能なら、その方法を教えていただきたいです。

  • マクロのFor...Next構文のことで

    マクロのFor...Next構文で、A1からA50までといったように文字が含まれる場合はどのように指定すればいいのでしょう?

  • For ~ Next の使い方

    for ~ next 構文の途中でカウンターを進めることはできますか。 For I=1 to 10 処理 if ~ then next 処理 next このようにすると、エラーになります。 仕方なく次のようにしていますが、もっと良い方法はありますか。 For I=1 to 10 処理 if ~ then goto 次の行へ 処理 次の行へ: next

  • For Next構文を使ったVBA

    こんにちは、VBAについて質問をさせてください!(>_<) 同じブックにシート「テスト」と「Sheet1」があり、「テスト」にはデータの入力欄、「Sheet1」には「テスト」に入力するためのデータが入っています。「テスト」の入力欄は「Sheet1」のデータの並び順と同じですが、入力したデータ同士に4行3列ずつデータを入力しないセルを作らなくてはなりません。 また、データを入力するセルは「テスト」の5列目8行目=「Sheet1」3列目2行目~「テスト」の20列目8行目=「Sheet1」8列目2行目のように、まず列番号を増やし、列番号が最大になったら行番号が増え、列番号はまた初期値から増えます。したがって、次は「テスト」の5列目9行目=「Sheet1」の3列目3行目~「テスト」の20列目9行目=「Sheet1」の8列目3行目になります。 上記を踏まえてVBAを作成してみたのですが、このままではi,j,k,l全ての値がNextで増えてしまいます。Ifを使ったりするのかと色々ネットで調べて考えてみましたが、行き詰まってしまいました。どなたかご教授いただけるととても嬉しいです。説明が長く申し訳ないです、わかりづらければ補足させていただくので、おっしゃってください! Dim i, j, k, l As Integer For i = 5 To 20 Step 3 'シート「テスト」の列 For j = 8 To 116 Step 4 'シート「テスト」の行 For k = 3 To 8 'シート「Sheet1」の列 For l = 2 To 39 'シート「Sheet1」の行 Cells(j, i).Value = Sheets("Sheet1").Cells(l, k).Value Next l Next k Next j Next i

  • Excel VBA For Nextっていらないんじゃないでしょうか?

    For i = 1 to 9 Next i と Do i = i + 1 Loop Until i = 9 はほとんど一緒じゃないのでしょうか? For Nextは使わなくてもDo Untilで代用できるんじゃないでしょうか?

  • VBA for i=1 to lastrow

    データ最終行を取得し、for nextループで回すことは多いですが、書き方として以下の2通り考えられます。 For i=1 to cell(cells.count, 1).end(xlup).row Lastrow=cell(cells.count, 1).end(xlup).row For i=1 to Lastrow 最初の方法はiがカウントされる度に最終行を計算すると思いますが 、そうなのでしょうか?その場合、計算時間は問題にならないのでしょうか?

  • For ~ Next文

    VB6でのFor~Next文で、指定した数字だけ処理しない方法はありますか? 例えばFor A = 0 To 100でA=20,50,80の場合は処理をスキップするという感じです。

  • 大至急!! It…for…to…の構文について

    大至急!! It…for…to…の構文について It…for…to…の構文で、forの後に人ではなく、keepingのような動名詞を 入れることはできますか? できない場合、It…to…の後にfor keeping…とするのは不自然ではないですか? 英語が得意な方、大至急よろしくお願いします!!

専門家に質問してみよう