Excel VBA質問箱 IV

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

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


5964 / 13646 ツリー ←次へ | 前へ→

【47944】WithまたはResizeの中でif文は使えないのでしょうか?(その2) カド 07/3/27(火) 12:37 質問[未読]
【47946】Re:WithまたはResizeの中でif文は使えな... Jaka 07/3/27(火) 13:41 発言[未読]
【47955】Re:WithまたはResizeの中でif文は使えな... カド 07/3/28(水) 8:13 お礼[未読]
【47958】Re:WithまたはResizeの中でif文は使えな... わさび 07/3/28(水) 9:51 質問[未読]
【47965】Re:WithまたはResizeの中でif文は使えな... Jaka 07/3/28(水) 11:20 発言[未読]
【47966】Re:WithまたはResizeの中でif文は使えな... わさび 07/3/28(水) 11:26 お礼[未読]
【47951】Re:WithまたはResizeの中でif文は使えな... ichinose 07/3/27(火) 20:03 発言[未読]
【47956】Re:WithまたはResizeの中でif文は使えな... カド 07/3/28(水) 8:30 お礼[未読]

【47944】WithまたはResizeの中でif文は使えない...
質問  カド  - 07/3/27(火) 12:37 -

引用なし
パスワード
   たびたびで恐縮ですが、教えてください。
(その1は先ほど投稿したのですが、間違いだったので消しました)

WithやResizeという構文に不慣れなのですが、
下記のようにif文を使いたいのですが、
型が一致しないというエラーが出ます。

このような構文は書けないのでしょうか?

With ActiveCell.Resize(5)

  If .Value = 1 Then  ← エラー
    .Offset(0, 1).Value = 99
  End If
  
End With

【47946】Re:WithまたはResizeの中でif文は使え...
発言  Jaka  - 07/3/27(火) 13:41 -

引用なし
パスワード
   >With ActiveCell.Resize(5)
↓の部分をコメントにして
>'  If .Value = 1 Then  ← エラー
>'    .Offset(0, 1).Value = 99
>'  End If
 .Select
 にしてみればどういうことをやろうとしているのか解ると思いますが 
>End With

Msgbox Range("A1:A5").value
と同じ事ですね。

【47951】Re:WithまたはResizeの中でif文は使え...
発言  ichinose  - 07/3/27(火) 20:03 -

引用なし
パスワード
   こんばんは。

>このような構文は書けないのでしょうか?
>
>With ActiveCell.Resize(5)
>
>  If .Value = 1 Then  ← エラー
>    .Offset(0, 1).Value = 99
>  End If
>  
>End With

Sub main()
  Dim add1 As String
  Dim add2 As String
  With ActiveCell.Resize(5)
    add1 = .Address
    With .Offset(0, 1)
     add2 = .Address
     .value = Evaluate("if(" & add1 & "=1,99,if(" _
          & add2 & "="""",""""," & add2 & "))")
     End With
    End With
End Sub

では?

【47955】Re:WithまたはResizeの中でif文は使え...
お礼  カド  - 07/3/28(水) 8:13 -

引用なし
パスワード
   ▼Jaka さん
回答ありがとうございます。

一般的なif文は使えないということですね。

【47956】Re:WithまたはResizeの中でif文は使え...
お礼  カド  - 07/3/28(水) 8:30 -

引用なし
パスワード
   ▼ichinose さん:
回答ありがとうございます。

こんな方法もあるんだなということで、
コードはキープしておきます。

【47958】Re:WithまたはResizeの中でif文は使え...
質問  わさび  - 07/3/28(水) 9:51 -

引用なし
パスワード
   横から失礼いたします。
私もつい先日、似たようなことでひっかかってしまったので、
この内容にはちょっと興味があります。

>>With ActiveCell.Resize(5)
>↓の部分をコメントにして
>>'  If .Value = 1 Then  ← エラー
>>'    .Offset(0, 1).Value = 99
>>'  End If
> .Select
> にしてみればどういうことをやろうとしているのか解ると思いますが 
>>End With
>
>Msgbox Range("A1:A5").value
>と同じ事ですね。

私なりに考えてみたのですが、この場合、Resizeが問題というわけではなく、
Jakaさんがおっしゃるところの、
Msgbox Range("A1:A5").Value
…これは、配列で各値を取り込んでいるわけではないので、
複数のセルの値を一度に出力できないという解釈でいいのでしょうか?

また、If ActiveCell.Resize(5).Value = 1 Then ... も、同じことかとは思いますが、
特にこの場合、5つのセルの値が1…
これは5つ全てのセルの値が1なのか、5つのうちどれかひとつでも1があればいいのか、
それとも、ひょっとして5つ合計した値が1なのか!?
などなど、人によってもその解釈が分かれそうなものをExcelは認識できないよ…
…と、噛み砕いて解釈してしまったのですが、これは間違った解釈でしょうか?

もし間違った解釈をしているのであれば、
今のうちにその勝手な思い込みを払拭したいと考えております。
ぜひアドバイスをいただければ幸いです。

【47965】Re:WithまたはResizeの中でif文は使え...
発言  Jaka  - 07/3/28(水) 11:20 -

引用なし
パスワード
   >複数のセルの値を一度に出力できないという解釈でいいのでしょうか?
そんな感じです。

これも同じです。
tb = Array("あ", "い", "う", "え", "お")
MsgBox tb

配列全体の中身を1度で表示できないというか、
○○団地の505号室に届けてくれというのを、ただ○○団地に届けるといったような....。
これも意味が違うかもしんない。

つまり配列のどの部分の事なのか解らないと話しにならないみたいな...。

上記で言えば、
Msgbox tb(2)
と指定すれば、「う」が取り出せます。

セル範囲も同じで
msgbox Range("A1:A5").cells(2).value
とすれば、A2の値が取り出せます。

こんなんで解りますか?
前にここでも説明しようとして挫折。
HTTP://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=78;id=FAQ

【47966】Re:WithまたはResizeの中でif文は使え...
お礼  わさび  - 07/3/28(水) 11:26 -

引用なし
パスワード
   ▼Jaka さん:

>セル範囲も同じで
>msgbox Range("A1:A5").cells(2).value
>とすれば、A2の値が取り出せます。

こういう書き方もあるんですね!!
すごく勉強になりますm(_ _)m
前回の私の書込で、前半部分はどこか勘違いをしておりましたが、
これで霧が晴れたようにすっきり分かりました。
ありがとうございます!

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