Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7946 / 13645 ツリー ←次へ | 前へ→

【35935】【初心者です】Sheetの指定について けんけん 06/3/16(木) 14:31 質問[未読]
【35936】Re:【初心者です】Sheetの指定について Blue 06/3/16(木) 14:39 回答[未読]
【35944】Re:【初心者です】Sheetの指定について バンザイ 06/3/16(木) 16:34 発言[未読]
【35945】Re:【初心者です】Sheetの指定について Blue 06/3/16(木) 16:40 発言[未読]
【35946】Re:【初心者です】Sheetの指定について バンザイ 06/3/16(木) 16:44 発言[未読]
【35948】Re:【初心者です】Sheetの指定について Blue 06/3/16(木) 16:59 発言[未読]
【35949】Re:【初心者です】Sheetの指定について Blue 06/3/16(木) 17:03 発言[未読]
【35950】Re:【初心者です】Sheetの指定について バンザイ 06/3/16(木) 17:04 発言[未読]

【35935】【初心者です】Sheetの指定について
質問  けんけん E-MAIL  - 06/3/16(木) 14:31 -

引用なし
パスワード
   以下の様なマクロを組んでいるのですが、
Sheet名を Sheet("1A")、Sheet("2A")、Sheet("3A")・・・といった具合に
NUMに「A」を追加したいのですが、どうしたら良いでしょうか?

===============
Dim WS As Worksheet
  Dim NUM As String  
  NUM = 1 
  
While NUM < 18
  Set WS = Sheets(CStr(NUM))
     .
     .
     .

【35936】Re:【初心者です】Sheetの指定について
回答  Blue  - 06/3/16(木) 14:39 -

引用なし
パスワード
   &演算子をヘルプで調べてみるとわかると思いますが、
文字列を連結するときに使用します。

サンプル1)
MsgBox "Hello " & "World"
MsgBox "Sheet" & CStr(1)

サンプル2)
Dim i As Integer
i = 10
MsgBox "Sheet" & CStr(i)

サンプル3)
Dim i As Integer
Dim s As String

i = 10
s = "Sheet"
MsgBox s & CStr(i)

【35944】Re:【初心者です】Sheetの指定について
発言  バンザイ  - 06/3/16(木) 16:34 -

引用なし
パスワード
   ▼けんけん さん:
>以下の様なマクロを組んでいるのですが、
>Sheet名を Sheet("1A")、Sheet("2A")、Sheet("3A")・・・といった具合に
>NUMに「A」を追加したいのですが、どうしたら良いでしょうか?
>
>===============
>Dim WS As Worksheet
>  Dim NUM As String  
>  NUM = 1 
>  
>While NUM < 18
>  Set WS = Sheets(CStr(NUM))
>     .
>     .
>     .

試してないから分からないけど、NUMってStringで宣言してるけど大丈夫なの?
Stringで宣言してるなら、Cstr(NUM)する必要もない気がするけど。
ループしてる中で、NUM=NUM+1とやるんでしょ?
だったら、NUMってStringじゃないほうがいいような気がする。
そもそも、Stringで宣言して、NUM=NUM+1とかできる?

【35945】Re:【初心者です】Sheetの指定について
発言  Blue  - 06/3/16(木) 16:40 -

引用なし
パスワード
   ▼バンザイ さん:
>そもそも、Stringで宣言して、NUM=NUM+1とかできる?
+演算子ならいけますね。(&はダメ)

Dim n As String
n = 1
Debug.Print n
n = n + 1
Debug.Print n
n = n + 1
Debug.Print n

' 比較も
If n < 4 Then
  MsgBox "OK"
End If

まぁ、文字列として扱わないのならば String型 にするのは良くないですよね。

【35946】Re:【初心者です】Sheetの指定について
発言  バンザイ  - 06/3/16(木) 16:44 -

引用なし
パスワード
   ▼Blue さん:
>▼バンザイ さん:
>>そもそも、Stringで宣言して、NUM=NUM+1とかできる?
>+演算子ならいけますね。(&はダメ)
>
>Dim n As String
>n = 1
>Debug.Print n
>n = n + 1
>Debug.Print n
>n = n + 1
>Debug.Print n
>
>' 比較も
>If n < 4 Then
>  MsgBox "OK"
>End If
>
>まぁ、文字列として扱わないのならば String型 にするのは良くないですよね。

ほー できるんだ
文字列として使わないものをStringで宣言したこと無いんで試したことも無かったです。
でもStringで宣言してるんだから、n = n + 1のけっかは[11]となってもおかしくないような気もするけど。&演算子みたいな結果を返してもいいような気もする。

【35948】Re:【初心者です】Sheetの指定について
発言  Blue  - 06/3/16(木) 16:59 -

引用なし
パスワード
   ▼バンザイ さん:
>でもStringで宣言してるんだから、n = n + 1のけっかは[11]となってもおかしくないような気もするけど。&演算子みたいな結果を返してもいいような気もする。

VBAヘルプには

<引用>
式の内部処理形式により、+ 演算子の動作は次のように異なります。

条件                   行われる演算

両方の式の内部処理形式が数値データ型   加算

両方の式の内部処理形式が文字列型 文字列 連結

一方の式の内部処理形式が数値データ型、
他方の内部処理形式が数値を表す文字とし  加算
て解釈できる文字列型          
</引用>

とありますね。
ややこしいんで、統一してもらいたい気もします。
さて引き算はどうなるのかなw

Dim s As String

s = 1
s = s - 1

s = "あ"
s = s - 1 ' 型が一致しません とエラー

# 等幅にチェックを入れ忘れたので 削除→再投稿しました。

【35949】Re:【初心者です】Sheetの指定について
発言  Blue  - 06/3/16(木) 17:03 -

引用なし
パスワード
   >s = "あ"
>s = s - 1 ' 型が一致しません とエラー
これ、+でもエラーだった。

s = "あ"
s = s + 1 ' エラー

s = "あ"
s = s + "1" ' OK


s = 1
s = s + "1" ' これは "11" になる


...String型に対しては + は使わないほうがやっぱいいですね。

【35950】Re:【初心者です】Sheetの指定について
発言  バンザイ  - 06/3/16(木) 17:04 -

引用なし
パスワード
   ▼Blue さん:
>▼バンザイ さん:
>>でもStringで宣言してるんだから、n = n + 1のけっかは[11]となってもおかしくないような気もするけど。&演算子みたいな結果を返してもいいような気もする。
>
>VBAヘルプには
>
><引用>
>式の内部処理形式により、+ 演算子の動作は次のように異なります。
>
>条件                   行われる演算
>
>両方の式の内部処理形式が数値データ型   加算
>
>両方の式の内部処理形式が文字列型 文字列 連結
>
>一方の式の内部処理形式が数値データ型、
>他方の内部処理形式が数値を表す文字とし  加算
>て解釈できる文字列型          
></引用>
>
>とありますね。
>ややこしいんで、統一してもらいたい気もします。
>さて引き算はどうなるのかなw
>
>Dim s As String
>
>s = 1
>s = s - 1
>
>s = "あ"
>s = s - 1 ' 型が一致しません とエラー
>
># 等幅にチェックを入れ忘れたので 削除→再投稿しました。

改めて+演算子をヘルプで見るなんてことはなかったなあ
手間をおかけしてご迷惑をおかけしました

7946 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free