• 締切済み

vbsのIsNumeric関数について

Excelのセルから値を取得しその値が数値かどうかをチェックしているのですがうまくいきません。以下のプログラムで間違えがありましたらご指摘をお願いします。 Dim obj Dim str Set obj = CreateObject("Excel.Application") str = obj.Worksheets(sheetname).Range("A11").Value If IsNumeric(str) Then MsgBox("")

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>str = obj.Worksheets(sheetname).Range("A11").Value obj はApplicationオブジェクトなので、WorkSheetsコレクションを 持っていません。WorkSheetsコレクションはWorkbookオブジェクトに 属します。正しくは下記の通りです。 str = obj.Workbooks(X).Worksheets(sheetname).Range("A11").Value Xはインデックス(1~)かブックの名前を指定します。

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

これで全部ですか?プログラムから行を無作為に抜粋したように見えますけど。 ・プログラミング自体、経験無し ・プログラミング経験はあるが、VBSが初めて ・VBSプログラミング経験はあるが、Excelを操作するのが初めて のどれでしょう?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Excelのインスタンスを生成してワークブックなどを読み込んでいないのですがこれは意図した動きなのでしょうか? Set obj = CreateObject("Excel.Applisction") obj.Workbooks.Open( "ブックのフルパス") str = obj.Worksheets(SheetName).Range("A11").Value if IsNumeric( str ) then MsgBox("") といった具合になりそうですが どこまで希望通りに動作して、どこからが希望通りの動作でないのかを具体的に投稿してみましょう エラーメッセージ出るならその内容を投稿してみましょう

関連するQ&A

  • vbsのセル値の取得について

    Excelシートからセルに入力された値を取得するプログラムを作成しています。しかし、セルに計算式が記入されたいる場合のみ値を取得している以下の部分で型が一致しないというエラーが発生してしまいます。対処方法を知っている方がおりましたら教えてください。 ※計算式でなく文字列が入力されている場合は正常に取得できます。 Dim str ・・・ str=obj.Worksheets("AAA").Range("A1").Value

  • エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛

    エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛、目盛間隔を揃えるにはどのようにしたら良いか教えてください。いくつかwebsiteで調べて下記のようにしてみましたが、x軸の目盛を変更するところで、失敗してしまいます。 よろしくお願いします。 Sub XY軸() Dim Ymin Ymin = InputBox("Y軸の最少?") If IsNumeric(Ymin) Then Range("C2").Value = Ymin Else MsgBox "入力NG!" End If Dim Ymax Ymax = InputBox("Y軸の最大?") If IsNumeric(Ymax) Then Range("C3").Value = Ymax Else MsgBox "入力NG!" End If Dim Y Y = InputBox("目盛間隔?") If IsNumeric(Y) Then Range("C4").Value = Y Else MsgBox "入力NG!" End If Dim xmin xmin = InputBox("X軸の最少?") If IsNumeric(xmin) Then Range("D2").Value = xmin Else MsgBox "入力NG!" End If Dim Xmax Xmax = InputBox("X軸の最大?") If IsNumeric(Xmax) Then Range("D3").Value = Xmax Else MsgBox "入力NG!" End If Dim X X = InputBox("Xの目盛間隔?") If IsNumeric(X) Then Range("D4").Value = X Else MsgBox "入力NG!" End If Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("C2").Value '最小値 .MaximumScale = Range("C3").Value '最大値 .MajorUnit = Range("C4") '目盛間隔 End With With .Axes(xlCategory) .MinimumScale = Range("D2").Value '最小値 .MaximumScale = Range("D3").Value '最大値 .MajorUnit = Range("D4") '目盛間隔 End With End With Next End Sub

  • ユーザー関数ではフィルはダメ!?

    VBAを勉強し始めたばかりの初心者です。 自分でユーザー関数を組んでみたのですが、とても困っています。 =GetA("カナ氏名",1) のように、引数が二つあるユーザー関数を作ったのですが、フィルでコピーしたときに、二番目の数字が1,2,3,4と変わっていきません。 ユーザー関数は、フィルでコピーしたときに自動的に増えないのでしょうか?ちなみに、中身は以下のとおりです。 Function GetA(DataName As String, Yline As Integer) As String Dim Obj As Object Dim SheetName As String SheetName = "ExpData" Set Obj = Worksheets(SheetName).Cells.Find(DataName) If Obj Is Nothing Then GetA = "" Else Xline = Worksheets(SheetName).Cells.Find(DataName).Column GetA = Worksheets(SheetName).Cells(Yline, Xline) End If End Function

  •  VBSの作り方がわかりません

    下記のようなVBSを使いたいのですが   テキストでなくエクセルをアクティブにしたいのですがうまくいきません   どのように直せばよいのかお教えください。  お願いいたします。 Dim excel With CreateObject("Wscript.Shell") .Run "D:\DATA\T.txt" End With On Error Resume Next Set excel = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set excel = CreateObject("Excel.Application") End If excel.Visible = True excel.Workbooks.Open "D:\DATA\Sin1.xls"

  • vbsの文字列比較について

    vbsプログラムでInstr()を使用して文字列を比較しているのですがうまくいきません。何か知っている方がいましたら教えてください。 Dim index Dim str Dim result '結果の保存 'sheetnameにはシート名(aaaテスト)が保存されています。 str = Array("テスト","test") For i=0 to UBound(str) step 1 index = InStr(str(i),sheetname) If index > 0 Then result = i next

  • 指定シートの有無を確認

    指定したシートの有無を確認するVBAを作っているのですがうまく作動しません。 Sub dummy() Dim dummy Dim sheetname As String sheetname = Sheets("入力").Cells(1, 1).Value '←『入力』というシートのセルA1と同じ値のシート名 On Error Resume Next Set dummy = sheetname If Err.Number = vbnomal Then flag = True On Error GoTo 0 If flag Then Msgbox "シートがあります" Else Sheets("原紙").Copy before:=Sheets(1) Worksheets(1).Name = sheetname End Sub 補足:入力というシートのA1に値が入っており、その値と同じシートがあればメッセージが出る、無ければ『原紙』というシートをコピーしてコピーしたシートのタブにA1の値を表示する

  • アクセスからエクセルのa列に入力されているセルの個数を数えたい

    アクセスvbaで エクセルのa列の個数を数えることは可能でしょうか? MsgBox GetObject(, "Excel.Application").Workbooks("Access用.xls").WorkSheets("集計").WorksheetFunction.Count(Columns("a")) だとコンパイルエラ-となってしまいます。 なので、 エクセル側でa1に集計セルを作って MsgBox GetObject(, "Excel.Application").Workbooks("Access用.xls").WorkSheets("集計").Range("a1").Value としていますが できればアクセスからダイレクトに個数を数えたいです。 できますでしょうか? よろしくお願いします。

  • vbs 文字位置を中央に

    vbscriptでエクセルファイルへ出力するスクリプトを作成しています。 エクセルファイルのセルに文字列を入力し、文字を中央揃えにしたいのですが、うまくいきません。 ----------------------------------------- Dim FSO, objExcel, objBook, objSheet Set FSO = CreateObject("Scripting.FileSystemObject") Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objBook = objExcel.Workbooks.Add Set objSheet = objExcel.Worksheets("Sheet1") objSheet.range("a1") = "test" objSheet.range("a1").HorizontalAlignment = xlHAlignCenter Set FSO = Nothing : objExcel = Nothing : Set objBook = Nothing : Set objSheet = Nothing ----------------------------------------- どうすれば、中央揃えにできますでしょうか? よろしくおねがいします。

  • VBSを使って Excel の任意シートを開くには

    VBS初心者です。知識のある方、ご教授願えませんか。 VBScript で同一フォルダにある「複数の Excelファイルを順番に任意のシートを選択して 開く」というのを実行したいのですが、どのようにすればよいでしょうか 仕事で急に必要になったのですが、VBScript の知識がなく困っていおります。 色々と調べてシート名が「半角英数字」なら成功したのですが、「漢字」の場合は「インデックスが有効範囲にありません」とエラーメッセージがでます。 「漢字」のシートを選択した場合でも成功するようにしたいのですが、どなたかご教授願えませんでしょうか? (●成功例)「半角英数字」のシートを指定した場合 Option Explicit Dim bk, ex, f, gf, sh, so Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") Set ex = CreateObject("Excel.Application") ex.Application.DisplayAlerts = False ex.Visible = true For Each f In gf.Files If LCase(so.GetExtensionName(f.Name)) = "xlsm" Then Set bk = ex.Workbooks.Open(gf & "\" & f.Name) ex.worksheets("shukei").select Set sh = bk.Worksheets(1) End If Next MsgBox("Finished!") (●失敗例)「漢字」のシートを指定した場合 Option Explicit Dim bk, ex, f, gf, sh, so Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(".") Set ex = CreateObject("Excel.Application") ex.Application.DisplayAlerts = False ex.Visible = true For Each f In gf.Files If LCase(so.GetExtensionName(f.Name)) = "xlsm" Then Set bk = ex.Workbooks.Open(gf & "\" & f.Name) ex.worksheets("集計").select Set sh = bk.Worksheets(1) End If Next MsgBox("Finished!")

  • 日付型変数を検索する方法

    シート内にある日付型の変数を検索させる処理をしたいのですが、以下のように記述したところ、 ================================== Dim hiduke As Date Dim lngYLine As Long Dim intXLine As Integer hiduke = Cells(1, 3).Value 'セルの値取得 Set Obj = Worksheets("Sheet1").Cells.Find(hiduke) If Obj Is Nothing Then MsgBox "該当の日付" & hiduke & "は、ありません。" Else lngYLine = Worksheets(newSh).Cells.Find(hiduke).Row intXLine = Worksheets(newSh).Cells.Find(hiduke).Column     MsgBox hiduke"は、" + CStr(lngYLine) + "行目の" _ + CStr(intXLine) + "列目にあります" End If ================================== Set Obj = Worksheets("Sheet1").Cells.Find(hiduke) で「実行時エラー"9" インデックスが有効範囲にありません」のエラーになります。 ワークブック内には Worksheets("Sheet1")存在しますし、なぜこのようなエラーがでるのか? また、どうしたら解消できるのか?について、教えていただきたく・・・ よろしくお願いいたします。

専門家に質問してみよう