[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Do Until...Loopがうまく動かない』(hiro)
繰り返し処理の練習です。
「値」「フォント」「行の高さ」のいずれかがsに設定されれば、MsgBoxでの警告の後、再び入力画面に戻るようにしたいのです。しかし、「型が一致しない」と出ます。
おかしな部分をご指摘いただけないでしょうか
よろしくお願いいたします。
(Sub ...()とEnd Subは省いています)
Dim rng As Range
Dim s As String
Set rng = Cells(6, 1)
s = InputBox("Cells(6, 1)の値、フォント、行の高さ?")
Do
Select Case s Case "値" MsgBox rng.Value Case "フォント" MsgBox rng.Font.Name Case "行の高さ" MsgBox rng.RowHeight Case Else MsgBox "値・フォント・行の高さのいずれかを入力"
End Select
Loop Until s <> "値" Or "フォント" Or "行"
< 使用 Excel:unknown、使用 OS:unknown >
> Loop Until s <> "値" Or "フォント" Or "行"
ぱっと見ですが、このように書くと、実際には以下のように書くのと同じになります。
Loop Until s <> "値" Or "フォント" = True Or "行" = True
"フォント" という文字列はString型であり、Boolean型(True/False)ではないので、エラーになるかと思います。 比較を横着せず、以下のように書いてみてください。
Loop Until s <> "値" Or s <> "フォント" Or s <> "行" (???) 2018/05/07(月) 09:21
Dim rng As Range Dim s As String
Set rng = Cells(6, 1)
Do s = InputBox("Cells(6, 1)の値、フォント、行の高さ?") Select Case s Case "値" MsgBox rng.Value Case "フォント" MsgBox rng.Font.Name Case "行の高さ" MsgBox rng.RowHeight Case Else MsgBox "値・フォント・行の高さのいずれかを入力" End Select Loop Until s = "値" Or s = "フォント" Or s = "行" (???) 2018/05/07(月) 09:30
s = InputBox("Cells(6, 1)の値、フォント、行の高さ?")
↓
s = InputBox("「値」、「フォント」、「行の高さ」いずれかの文字列を入力してください。")
のように直さないと何度表示されても何を入力するのが正解なのかユーザーには伝わらないような気がするんですが・・
(キャンセルやバツボタン押しても「""」が返ってループから抜けないので、”正解”を知らないと無限ループする嫌がらせになるんじゃないかと)
また、「Cells(6, 1)の値」と表示されてもユーザーには、なんのこっちゃなのでは?
たとえば、「rng.Address(0, 0) & "セルの値"」などとして、「A6セルの値」と言ってあげるようにしないと意味が解らない人がいるような気がしますし、そもそも、そこは「A6セルの値」ではなく、「値」の間違いなんじゃないかと思ったり・・・
ちなみに、あらかじめ複数の候補を用意しておいて、ユーザーにどれかを選ばせるのであれば、コンボボックス(フォームコントロール、ActiveXコントロールどちらにもある)や入力規則などを使うという手があるので、平行してそちらも研究してみるといいかもしれません。
(もこな2) 2018/05/07(月) 11:27
「"フォント" という文字列はString型であり、Boolean型(True/False)ではないので、エラーになるかと思います。」がまだ理解半分なので、現時点ではなんとなくではありますが、理解しました。
ありがとうございます。
>もこなさま
あくまで勉強中の練習なので、その辺は自分がわかるようにしか書いてません。
余計な手間をおかけして、大変失礼しました。
詳しく書いておくべきでした。
コンボボックスもできるのですね。
ありがとうございます。
(hiro) 2018/05/07(月) 12:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.