- ベストアンサー
ウォッチウインドウで確認すると、「Range("a1").Value」は「十」ボタンができる
Sub test() Dim Strmoji As String Strmoji = "a" MsgBox Range("a1").Value MsgBox Strmoji End Sub Range("a1").ValueとStrmojiをウォッチ式に追加して このコードをF8でデバッグしていくと Range("a1").Valueの方だけ「十」ボタンが付き、 クリックすると広がりたくさんの情報が表示されています。 これはRangeだからですか?Cellも試してみたけど同じでした。 しかしなぜ、Strmojiは「十」ボタンがでないのでしょうか? 「十」ボタンがでるのとでないのでは何が違うのですか? よろしくお願いします。
- dfghhj
- お礼率99% (432/434)
- オフィス系ソフト
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 端的に言って、ウォッチ式の登録が間違ってはいませんか? 添付の図をみてください。 Range("A1")+....Object/Range .Value .........Variant/String Strmoji.........String この前も別の方の質問でも、ウォッチウィンドウがありましたが、値を確認するなら、ローカルウィンドウでも良いと思うのですが……。プラス(+)が右隣に出るのは、オブジェクト・配列・コレクションということになるのだろうとは思うのですが、それは、開ければ分かると思います。
その他の回答 (1)
- nag0720
- ベストアンサー率58% (1093/1860)
Range("a1").Valueには+ボタンは付きません。 +ボタンが付くのはRange("a1")です。 これは、Rangeがオブジェクトだからです。 オブジェクトはいろいろなプロパティを持っているため、それらを表示するために+ボタンが付きます。 さらに表示されるプロパティがオブジェクトの場合、そのプロパティにも+ボタンが付きます。 オブジェクトではない変数やプロパティには+ボタンは付きません。 なお、Range("a1")の値がグレー表示になっているのは、Rangeの既定のプロパティがValueなのでその値を出しているからです。
お礼
オブジェクトだからと言うことですね。 今実験してみましたが、Range("a1").Valueでは確かに付きませんでした。 ありがとうございます。
関連するQ&A
- 配列のメリットは?
下記のコードは同じ動作をします。 Sub 普通() Dim moji1 As String Dim moji2 As String moji1 = Range("a1").Value moji2 = Range("a2").Value MsgBox moji1 & moji2 End Sub --------------------------------------------- Sub 配列() Dim moji(2) As String moji(1) = Range("a1").Value moji(2) = Range("a2").Value MsgBox moji(1) & moji(2) End Sub こういう場合は配列を使ったほうがいいのでしょうか? それとも配列は避けたほうがいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- Range.Name プロパティの使い方
VBAの勉強中のものです。(エクセル) 一つ一つヘルプを見て、検証して勉強していこうと思ってるのですが 使い方がわからないので教えてください。 Range.Value プロパティならうまくいくのですが、 Range.Name プロパティの使い方がわかりません。 ----------------------- Sub test1() MsgBox Range("a1").Name End Sub Sub test2() Dim R As Range Set R = Range("a1") MsgBox R.Name End Sub ----------------------- どちらも、アプリケーション定義またはオブジェクト定義のエラーです。になります。 ----------------------- Sub test1() MsgBox Range("a1").Value End Sub Sub test2() Dim R As Range Set R = Range("a1") MsgBox R.Value End Sub ----------------------- rangeにすればうまくいきます。 Range.Name プロパティの使い方を教えてください。アドバイスよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel シートにボタンを作成するVBA
ExcelシートのA列にWAVEファイルのフルパス名が書かれている状態で、 このWAVEファイルを再生するボタンをC列に作成するVBAを作りたいのですが、 ボタンが押されたときに実行されるプロシージャに引数がないときは、 コード1のようにすればできますが、 ボタンが押されたときに実行されるプロシージャに引数があるときは、 コード2のように記述してもエラーになりますが、 どのように記述すればよいのでしょうか。(Windows10,Excel2010) '-----------------コード1------------------------------------------ Sub test() Dim row As Integer Dim wave_file_path As String row = 1 wave_file_path = ThisWorkbook.Worksheets("Sheet1").Cells(row, 1).Value Call 再生ボタン作成(row, wave_file_path) End Sub Sub 再生ボタン作成(ByVal row As Integer, ByVal wave_file_path As String) Dim cell_loc As String cell_loc = ThisWorkbook.Worksheets("Sheet1").Cells(row, 3).Address ThisWorkbook.Worksheets("Sheet1").Select With ActiveSheet.Buttons.Add(Range(cell_loc).Left, _ Range(cell_loc).Top, _ Range(cell_loc).Width, _ Range(cell_loc).Height) .name = "ボタン_" & cell_loc .OnAction = "WAVE_PLAY" .Characters.Text = "再生" End With End Sub Sub WAVE_PLAY() Dim wave_file_path As String wave_file_path = "Z:\Document\4_Data\CD_DVD_USB\USB_20200222\REC\JBP001\JBP00101.WAV" If Dir(wave_file_path) = "" Then MsgBox wave_file_path & vbCrLf & "がありません。", vbExclamation Exit Sub End If Shell "C:\Program Files\Windows Media Player\wmplayer.exe /play /close " & wave_file_path End Sub '------------------------------------------------------------------- '-------------------コード2---------------------------------------- Sub test() Dim row As Integer Dim wave_file_path As String For row = 1 To 100 wave_file_path = ThisWorkbook.Worksheets("Sheet1").Cells(row, 1).Value Call 再生ボタン作成(row, wave_file_path) Next row End Sub Sub 再生ボタン作成(ByVal row As Integer, ByVal wave_file_path As String) Dim cell_loc As String cell_loc = ThisWorkbook.Worksheets("Sheet1").Cells(row, 3).Address ThisWorkbook.Worksheets("Sheet1").Select With ActiveSheet.Buttons.Add(Range(cell_loc).Left, _ Range(cell_loc).Top, _ Range(cell_loc).Width, _ Range(cell_loc).Height) .name = "ボタン_" & cell_loc .OnAction = "WAVE_PLAY " & wave_file_path ' <==== ◆ここでエラーになります◆ .Characters.Text = "再生" End With End Sub Sub WAVE_PLAY(ByVal wave_file_path As String) If Dir(wave_file_path) = "" Then MsgBox wave_file_path & vbCrLf & "がありません。", vbExclamation Exit Sub End If Shell "C:\Program Files\Windows Media Player\wmplayer.exe /play /close " & wave_file_path End Sub '-------------------------------------------------------------------
- ベストアンサー
- Excel(エクセル)
- Excel VBA 引数が2個のマクロの呼び出し方
ExcelのVBAで、 シート上のボタンがクリックされた時に呼び出す マクロ(プロシージャ)の引数が1個の時は、 コード1のようにできましたが、 引数が2個ある時は、コード2のように記述しても、 ボタンをクリックするとエラーになりますが、 【?】の部分をどのように記述すればよいのでしょうか。 (Windows10,Excel2010) -------------------コード1---------------------------------------- Sub test1() Dim row As Integer Dim wave_file_path As String For row = 1 To 2 wave_file_path = ThisWorkbook.Worksheets("Sheet1").Cells(row, 1).Value Call ボタン作成(row, wave_file_path) Next row End Sub Sub ボタン作成(ByVal row As Integer, ByVal wave_file_path As String) Dim cell_loc As String cell_loc = ThisWorkbook.Worksheets("Sheet1").Cells(row, 3).Address ThisWorkbook.Worksheets("Sheet1").Select With ActiveSheet.Buttons.Add(Range(cell_loc).Left, _ Range(cell_loc).Top, _ Range(cell_loc).Width, _ Range(cell_loc).Height) .name = "ボタン_" & cell_loc .OnAction = "'WAVE_PLAY """ & wave_file_path & "" & "'" .Characters.Text = "再生" End With End Sub Sub WAVE_PLAY(ByVal wave_file_path As String) If Dir(wave_file_path) = "" Then MsgBox wave_file_path & vbCrLf & "がありません。", vbExclamation Exit Sub End If Shell "C:\Program Files\Windows Media Player\wmplayer.exe /play /close " & wave_file_path End Sub ------------------------------------------------------------------- -------------------コード2---------------------------------------- Sub test2() Dim row As Integer Dim wave_file_path As String For row = 1 To 2 wave_file_path = ThisWorkbook.Worksheets("Sheet1").Cells(row, 1).Value Call ボタン作成(row, wave_file_path) Next row End Sub Sub ボタン作成(ByVal row As Integer, ByVal wave_file_path As String) Dim cell_loc As String cell_loc = ThisWorkbook.Worksheets("Sheet1").Cells(row, 3).Address ThisWorkbook.Worksheets("Sheet1").Select With ActiveSheet.Buttons.Add(Range(cell_loc).Left, _ Range(cell_loc).Top, _ Range(cell_loc).Width, _ Range(cell_loc).Height) .name = "ボタン_" & cell_loc .OnAction = "'WAVE_PLAY """ & wave_file_path & "" & "," & row & "'" <==【?】 .Characters.Text = "再生" End With End Sub Sub WAVE_PLAY(ByVal wave_file_path As String, ByVal row As Integer) If Dir(wave_file_path) = "" Then MsgBox wave_file_path & vbCrLf & "がありません。", vbExclamation Exit Sub End If Shell "C:\Program Files\Windows Media Player\wmplayer.exe /play /close " & wave_file_path ThisWorkbook.Worksheets("Sheet1").Cells(row, 4).Value = "再生済" End Sub -------------------------------------------------------------------
- 締切済み
- Excel(エクセル)
- Objectで宣言するのとObject型で宣言する
Objectで宣言するのとObject型で宣言するのではどちらがいいでしょうか? エクセルです。 VBAでコードを作るにおいて、どちらのほうがいいのでしょうか? どちらも同じ動きをします。 Sub Sample1() Dim buf As Range Set buf = Range("A1") MsgBox buf.Value End Sub Sub Sample2() Dim buf As Object Set buf = Range("A1") MsgBox buf.Value End Sub ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- midステートメント セルを指定したい
エクセルなのですが、 Sub N文字目を置換する1() Dim N As Long Range("a1").Value = "abcde" N = 2 '置換する文字の位置 ’start(省略不可) Mid(Range("a1").Value, N) = "X" MsgBox Range("a1").Value End Sub このように、セルを指定することはできないのでしょうか? このコードを実行しようとすると、 Mid(Range("a1").Value, N) = "X"の部分で「変数が必要です」とコンパイルエラーになります。 Sub N文字目を置換する2() Dim moji As String Dim N As Long Range("a1").Value = "abcde" moji = Range("a1").Value N = 2 Mid(moji, N) = "X" MsgBox moji End Sub このように、セルの値を一度変数に入れると問題なく実行できますが、 なぜダイレクトにmidステートメントでセルを指定できないのかわからないので教えてください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- excel 文字抽出マクロの編集についてですが・・・
マクロで指定した文字を含むデータを抽出するマクロを 作っていたのですが、うまく作動しません。 どこが悪いか教えてください。 Sub 指定した文字データの抽出() Dim strMoji As String strMoji = InputBox("検索文字を入力してください") strMoji = "*" & strMoji & "*" Sheets("Sheet2").Activate Cells.Clear With Sheets("Sheet1") .Range("A2").AutoFilter Filde:=3, criterial:=strMoji .Range("A2").CurrentRegion.Copy _ Destination:=Sheets("Sheet2").Range("A2") .Range("A2").AutoFilter End With Sheets("Sheet2").Columns("A:D").AutoFit End Sub
- 締切済み
- オフィス系ソフト
- 変数に特定の文字が含まれているなら(VBA)
以前に質問した http://oshiete1.goo.ne.jp/qa4407128.html とは違うのですが 変数"あいうえお"に "あ"が含まれているなら "含まれています"と表示したいです。 Sub test() Dim strmoji As String strmoji = "あいうえお" If Find(strmoji) Like "*あ*" Then MsgBox "含まれています" End If End Sub 部分的に考えてみたのですが 「Sub、Function、または Property が定義されていません。(Error 35)」 が出てしまいます。 ご教授よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- Const に dim は使えない?
標準モジュールに ''''''''''''''''''''''''''''''''''''''''''' Dim Const moji As String = "a" Sub test1() MsgBox moji End Sub Sub test2() Dim Const moji As String = "a" MsgBox moji End Sub ''''''''''''''''''''''''''''''''''''''''''' とするとエラーになりますが ''''''''''''''''''''''''''''''''''''''''''' Public Const moji As String = "a" Sub test3() MsgBox moji End Sub ''''''''''''''''''''''''''''''''''''''''''' なら大丈夫です。 Const に対してdimは使えないのでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルVBAを教えて下さい
エクセルの表で -AB C D E F 1年月--1801 2------ 3------ 4------ (-)は空欄でセルE1=18、F1=1とします。 コントロールボックスをつかって Private Sub Command登録_Click() Dim d1 As Long Dim d2 As Long Dim ret As Variant Dim FindValue As String Dim TotalAddress As String If Range("E1").Value = "" Or Range("F1").Value = "" Then MsgBox "該当する場所にデータが入っていません。", vbCritical Exit Sub End If d1 = Range("A65536").End(xlUp).Offset(1).Row d2 = Range("B65536").End(xlUp).Offset(1).Row FindValue = """" & Range("E1").Value & Range("F1").Value & """" TotalAddress = Range("A1").Resize(d1).Address & "&" & Range("B1").Resize(d1).Address ret = Evaluate("MATCH(" & FindValue & "," & TotalAddress & ",0)") If IsError(ret) Then Cells(d1, 1) = Range("E1").Value Cells(d2, 2) = Range("F1").Value Else MsgBox "既に同じ組み合せがあります。", vbInformation End If End Sub というものを作ったのですが、E1=18、F1=1及びコマンドボタンを別シートに作成し、上記の表への登録をできるようにしたいのですが、なにかいい方法はありませんか?
- ベストアンサー
- オフィス系ソフト
お礼
ローカルウインドウの使い方がわかっていませんでした。 参考になりました。