• ベストアンサー

エクセル VBAを使って、セルの中身が文字か数値か判断したい

具体的に; Workbooks.Open Filename:=ca3'対象ファイルを設定 Sheets("Sheet1").Select'シートを指定 Debug.Print Cells(2, 3)'セルを参照 でセルを参照するところまでできました そこで、セル(例えばCells(2,3) )が文字が入って いるか/数値が入っているか、判別するには どうしたらいいのですか

  • ppmi
  • お礼率88% (331/372)

質問者が選んだベストアンサー

  • ベストアンサー
  • laibach
  • ベストアンサー率29% (101/342)
回答No.3

「IsNumeric、って書いたら」とありますが、どのように書かれたのでしょうか? 例えば、VBAで  If IsNumeric(Cells(2, 3)) = True Then   data = Cells(2, 3)  Else   data = ""  End If のように書けば、エラーは出ないと思いますが。

ppmi
質問者

お礼

わかりました エラーなく、出来ました 返事おくれてすみませんでした

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

ちょっと割り込み失礼します。 #1 さんの書いた方法を、私は多様しますが、文字列であるか、数値であるかという判別というのは、あまりしたことがありません。それは、次に続くコードが重要だからです。 あれこれと、セルの情報を取りたいのでしたら、 Sub TestValueCheck()   Dim msg As String   Select Case VarType(Cells(2, 3))   Case vbEmpty    msg = "空"   Case vbDouble    msg = "数値"   Case vbString    msg = "文字列"   Case vbBoolean    msg = "ブーリアン値"   Case vbError    msg = "エラー値"   End Select   MsgBox msg & "です。" End Sub ということになりますかしらね。 通常は、 If Vartype(Cells(2,3).Value) = VbDouble Then  '処理 End if だけですね。 なお、IsNumeric 関数は、あくまでも、VBAの関数ですから、書式には関係がなく、数字であるという判別をします。数値であるのか、文字列かは関係がありません。

ppmi
質問者

お礼

よくわかりました ていねいに、ありがとうございました

  • laibach
  • ベストアンサー率29% (101/342)
回答No.2

セルに入っているのが文字か数値だけなら、IsNumeric関数を使えばいいと思います。 セルに空白もありえるのなら、IsEmpty関数も使った方がいいかもしれません。

ppmi
質問者

お礼

ありがとうございました 続けてお尋ねは失礼ですが、わかったらで! ------- IsNumeric、って書いたら、関数が定義されてない とエラーになりました これを有効にするにはどこか設定が必要なんでしょうか または、セルに直接呼び出す関数とVBAで使う関数 とちがうのでしょうか -------- 失礼します Excell2003、WindowXPです

noname#123709
noname#123709
回答No.1

下記で値の種類を表示します。 戻り値についてはHELPをみて下さい。 Sub test() MsgBox VarType(Cells(2, 3)) End Sub

ppmi
質問者

お礼

ありがとうございました できました

関連するQ&A

  • ACCESSのVBAからExcelのセルから読めたのですが、書く方法を教えてください

    下記の方法でCell(1,1)、から読むことができました そこで今度書き込みなのですが With xlBk.Worksheets("Sheet1")    'Debug.Print .Cells(1,1)    .Cell(1,2) = "data" End With としても、エクセルシートには書かれていないのですが 書く方法を教えてください ただ、下記の Open(Filename:=strFile, UpdateLinks:=0) はエクセルをOpenする時 「このブックは他のデータソースへのリンクがふくまれています」 とメッセージがでるので、UpdateLinks:=0、と入れています よろしくおねがいします '--------------------------------- Dim xlApp As Excel.Application Dim xlBk As Excel.Workbook Dim strFile As String strFile = "C:\Sample\Book1.xls" Set xlApp = CreateObject("Excel.Application") Set xlBk = xlApp.Workbooks.Open(Filename:=strFile, UpdateLinks:=0) With xlBk.Worksheets("Sheet1")   Debug.Print .Cells(1,1) End With xlBk.Close False xlApp.Quit Set xlApp = Nothing '----------------------------------

  • Excel 2007 VBAで セル内数値の反映が出来ません

    Excel 2007 VBAで セル内数値の反映が出来ません プログラム中に、セルの数値を参照したいのですが、うまく行きません。 下記にて、コピー元セル指定の範囲指定が、+H3 が反映できません。                          ↓  Sheets("会員台帳").Select              Range(Cells(CopymotoRS, 62), Cells(CopymotoRS + H3 - 1, 71)).Select Application.CutCopyMode = False Selection.Copy

  • VBA VLOOKUPとセルのコピーができません

    助けてください マクロでVLOOKUPを使い、データを持ってこようとしてますが上手くいきません やりたいこと:Sheet3(在庫を貼付)にある4列目の数値を、Sheet1のG列で照合し、Sheet1の9列目に持ってきたい Sheet1:cells(6,9)にVLOOKUPの式を入れる 関数で言えば=VLOOKUP($G,Sheet3!C:F,4,FALSE) cells(6,9)をcells(7,9)からcells(2000,9)までコピー これを実行すると 「アプリケーション定義またはオブジェクト定義のエラーです。」 とでて止まってしまいます ActivesheetsやWorkbooks、WorksheetsやSheetsで設定したりしてもエラーは変わりますが 止まってることには変わりありません どうしたら動くようになりますか? Sub vlook() Dim Nname As String macx = "ルーチンワーク20130223.xlsm" 'マクロ用ファイル「ルーチンワーク20130223.xlsm」がある Sheets(1).Select Workbooks(macx).Activate Worksheets(1).Activate ddir = Cells(33, 2) 'cells(33,2)にフォルダ情報がある Nname = Dir(ddir & "在庫推移.xlsx") '在庫推移.xlsxというVLOOKUPしたいファイルがある Workbooks.Open Filename:=ddir & Nname Workbooks(Nname).Activate Sheets(1).Select Worksheets(1).Activate 'VLOOKUPで在庫を持ってくる ActiveCell.FormulaR1C1 = "=VLOOKUP(RC7,'在庫を貼付'!C[-6]:C[-3],4,FALSE)"   '自動記録マクロから持ってきてます Worksheets(1).Activate Sheets(1).Select Range(Cells(6, 9)).Copy Destination:=Sheets(1).Range(Cells(7, 9)) 'この行でエラーが出る

  • VBA セルに入力されている数値でセルを指定する

    Excel VBA初心者です。 Sheet1のA1セルに10、A2セルに3を入力しています。 この入力したセルの数値を参照して、 Sheet2の「Cells(10,3)」(C10セル)を青(Interior.ColorIndex = 5)に 書式変更したいのですが、「Cells(”Sheet1.A1の値”,”Sheet1.A2の値”)」の 書き方がわかりません。 Excel2010を使用しています。 よろしくお願いします。

  • 指定した範囲のセル内の数値を検索したい(VBA)

    いつもありがとうございます。 また皆様のお知恵を拝借したいと思い質問をさせて頂きました。 現在VBAを勉強中なのですが、以下の場合、コードはもっと簡単になるでしょうか? 【やりたい事】 プログラムを実行すると、シート2に数値が返されます。  ※数値が返される範囲は「A1~A100」だとします。 シート2の「A1~A100」には「1~4」の数値が返され、それぞれの数値が何個あるかを検索。 検索した結果を、「シート1」の指定したセルに表示する。 【記述したコード】 dim x as integer x = 0 For x = 1 To 101 If Sheets("シート2").Cells(x, 1) = "1" Then 1count = 1count + 1 End If If Sheets("シート2").Cells(x, 1) = "2" Then 2count = 2count + 1 End If If Sheets("シート2").Cells(x, 1) = "3" Then 3count = 3count + 1 End If If Sheets("シート2").Cells(x, 1) = "4" Then 4count = 4count + 1 End If Next x 上記のコードで「"x"count」に数値を加算していき、最終的に以下のように各数値をシート1に表示させています。 Sheets("シート1").Range("A1") = 1count Sheets("シート1").Range("A2") = 2count Sheets("シート1").Range("A3") = 3count Sheets("シート1").Range("A4") = 4count 結果的にはうまくカウントされて、結果も正しく表示されるのですが、 列をまとめて検索してやる方法などがあれば、もっと短く分かりやすく おさまるのではと思い、質問をさせて頂きました。 こうやるともっと簡単にできるよなどがあれば、教えて頂けないでしょうか。 Excelの関数などを使用しても構いません。 以上、よろしくお願いします。

  • エクセル セルの文字列の有無からほかのセルに数値を

    勤務リスト.xlsx におきまして セルE1に、午前休、 という文字列があれば セルF1に数値の0 セルG1に数値の2000 を入力 同様に セルEiに、午前休、 という文字列があれば セルFiに数値の0 セルGiに数値の2000 31日を計算にいれて iを1から30としました エクセルファイルの開発から マクロに行き 以下のコードをいれましたが ------------------------------- Sub 午前休み() Dim 選択シート As Sheets Dim i As Integer Set 選択シート = ActiveWindow.SelectedSheets If InStr(Cells(5, i), "午前休") > 0 Then Cells(6, i).Value = 0 Cells(7, i).Value = 2000 i = 1 Do Until i = 30 i = i + 1 Loop End If End Sub 上記 作動しません すみません 御教示くださいませ win10 office365

  • エクセルVBAの変数利用

    シートのC1セルに入力したブック名をアクティブにするための 変数なのですが、アクティブになりません。 下のようにしていますが、とのようにすればよいでしょうか? Sub test() Dim FileName As Range FileName = ThisWorkbook.Path & "\" & Sheets("sheet1").Range("C1") & ".xls" Workbooks.FileName.Activate End Sub

  • エクセル マクロ セルからファイルを読み込む?

    いつもお世話になっています 早速ですが、フォルダー内のCSVファイルをシート2に書き出しているのですが その後、その部分(sheets2のa1から順に)を参照してファイルを開こうとするために Workbooks.Open(Filename:=myFile)を使用した場合カンマ区切りでは開かず羅列となるためWorkbooks.OpenTextをつかおうとしたのですが怒られてしまいます。 順次ファイルを読み込んで処理を自動で行い保存をして次のファイルと自動でフォルダー内を処理したいのですが その部分でつまってしまっています どうかよろしくお願いします。

  • EXCEL VBA のブック操作

    完全に自己流でEXCEL2000のVBAを作成しています。 とても単純な操作なのですが、思い通り動きません。 どうかご教授ください。 よろしくお願いします。 Main ファイルとSubファイルがあります。【パス名とファイル名は指定済み】 ブック内のシートの構成は全く同じになっています。 (MainファイルのVBAを実行後Subファイルが作成されます ファイル名は作成日を入れて保存していっています。) それで以前作成したデータを利用するために、 MainファイルのVBAを実行中にSubファイルを開き参照したいシートを Mainファイルにコピーし、Subファイルを閉じたいのですが フォーカスがうまくいかず、Mainファイルが閉じてしまいます。 何がおかしいのでしょうか? Workbooks.Open Filename:=SubFile Sheets("Sheet1").Select Worksheets("Sheet1").Name = "ASheet" Sheets("ASheet").Copy After:=Workbooks(MainFile).Sheets(TotalSheet) Workbooks(SubFile).Activate ActiveWorkbook.Close Workbooks(MainFile).Activate Sheets(TsumSheet).Select オープンしてコピーまではできているのですが・・・

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

専門家に質問してみよう