[[20180506102735]] 『セルの値の書き換えじゃなくてセルの値を表示した』(hiro) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの値の書き換えじゃなくてセルの値を表示したい』(hiro)

セルの情報を表示する練習です。
「フォント」と「行の高さ」は表示できるのですが、値が思った動作をしません。これを実行して"値"と入力すると、Cells(6.1)の値が書き換えられます。
どこがおかしいか、指摘していただけないでしょうか。

よろしくお願いします。

 Sub test()
    Dim rng As Range
    Set rng = Cells(6, 1)
    rng = InputBox("Cells(6, 1)の値、フォント、行の高さ?")
    If rng = "値" Then
    MsgBox (rng.Value)
    ElseIf rng = "フォント" Then
    MsgBox (rng.Font.Name)
    ElseIf rng = "行の高さ" Then
    MsgBox (rng.RowHeight)
    Else
    MsgBox ("値・フォント・行の高さのいずれかを入力")
    End If
 End Sub

< 使用 Excel:unknown、使用 OS:unknown >


3行目。
Input boxの返り値を
Range変数のValueプロパティにセットしているから。
変数をそんなに節約する必要ないです。

(γ) 2018/05/06(日) 11:23


インプットボックスに入力した内容をrngに設定していたのですね。
その後の値が書き換えた理由は、残念ながらわかっていないのですが。
(変数rngに"値"が設定されて、 Ifが真と判別されたことになるのでしょうか?)

しかし InputBox ("Cells(6, 1)の値、フォント、行の高さ?")からrngへの代入をやめても(rng = を削除しても)、思う通りに動かないのはなぜでしょうか…。

きっと馬鹿な勘違いをしているのだと思うのですが…よろしければお願いいたします。

(hiro) 2018/05/06(日) 22:32


 目的は勉強ということでしょうか。

 Sub test()
     Dim rng As Range
     Dim s As String

     Set rng = Cells(6, 1)

     s = InputBox("Cells(6, 1)の値、フォント、行の高さ?")

     If s = "値" Then
         MsgBox rng.Value
     ElseIf s = "フォント" Then
         MsgBox rng.Font.Name
     ElseIf s = "行の高さ" Then
         MsgBox rng.RowHeight
     Else
         MsgBox "値・フォント・行の高さのいずれかを入力"
     End If
 End Sub

(γ) 2018/05/06(日) 22:39


ついでにSelect Caseの勉強に格好の材料かも?
(γ) 2018/05/07(月) 05:55

ありがとうございます。
そうですね、勉強段階です。

Range型にRangeオブジェクト以外を設定したから、おかしかったのですね。
変数は二つ必要でした。

Select Caseの方が若干すっきりしますね!

Dim rng As Range
Dim s As String

Set rng = Cells(6, 1)

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
(hiro) 2018/05/07(月) 08:20

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.