VBからExcelのデータを参照する方法と、数字の文字列変換について

このQ&Aのポイント
  • VBからExcelのデータを参照する方法と、数字の文字列変換について解説します。
  • ExcelのA列には数字も含まれており、VBではこれを文字列として扱う方法が必要です。
  • Excelから受け取ったデータを文字列に変換する方法について、参考になるWebサイトもご紹介します。
回答を見る
  • ベストアンサー

VBからExcelのデータを参照するには?

VBからExcelのデータを参照するには? ExcelのA列を、参照しようとしています。 このA列には数字も混じっています。 例えば A123 abc 456 qwer のように、4行あったとします。 VBのソースコードは、次の通り --------------------- Dim elSequence(10) As String i = 0 Do Until objSheet.Range("a2").Offset(i,0).Value = "" elSequence(i) = objSheet.Range("a2").Offset(i,0).Value i += 1 Loop --------------------- 問題は、Excelのセルに「数字だけの場合(上記の例で4行目)」で、VBはこれを、文字列として扱わずにDouble型と認識してしまいます。 例え、Excelのセルを、プロパティの文字列指定としても「456」はDouble型になってしまいます。 Excelから受け取ったデータを、文字列への変換はどのようにしたら良いですか。 参考になりそうなWeb等でも構いませんので、教えていただけませんか。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

文字列として扱いたいなら、単に「.Value」ではなく、「.Text」で良いのでは?

xcode_15
質問者

お礼

御解答を戴きまして、誠にありがとうございます。 >文字列として扱いたいなら、単に「.Value」ではなく、「.Text」で良いのでは? Oh! 旨くいきました。

関連するQ&A

  • VBからExcelのデータを並べ替えしたい

    VB2008を使用しています。 VBからExcelのデータを並べ替えしたいのですが、どうやればいいのかわかりません。 VBからExcelを立ち上げ、シートおよびセルを参照するところまではできています。 下記を実行するとA列とD列が入れ替わっているだけです。 k_syain_Sheet.Range("A1:D10000").Sort(k_syain_Sheet.Range("A2"), Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending, _ k_syain_Sheet.Range("D2"), , Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending, _ k_syain_Sheet.Range("B2"), Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending) やりたいことは、Excel上のA1~D10000にデータが入っており、A1~D1はタイトル行です。 これから、最優先されるキー「A1」 2番目に優先されるキー「D1」 3番目に優先されるキー「B1」(それぞれ昇順)として並べ替えをしたいのです。 よろしくお願いします。

  • 2007エクセルVBが2013エクセルで動かない

    よろしくお願いします。 エクセル2007VBをエクセル2013に移行して動かしたところ >>>>の部分でエラーが出ました 2007では動いていたのですが、なぜエラーになったのかわかりません。 プログラムは下記の通りです。 Dim iti1 As String Dim ITI2 As String Dim ITI3 As String Dim ITI4 As String Dim ITI5 As String Dim ITI6 As String Dim ITI7 As String Dim ITI8 As String Dim myRange As Range Dim myrange1 As Range Dim answer As Integer Dim c As Double Dim n As Double Workbooks(book1).Activate Sheets("A").Select ITI4 = Range("D65536").End(xlUp).Address '----D列の最終行から上方向の終端セルを選択 Set myRange = Worksheets("A").Range("d6", ITI4) answer = Application.WorksheetFunction.Count(myRange) Set myrange1 = Worksheets("A").Range("g5") For c = 1 To answer 'データー個数のカウント If myrange1.Offset(c) = myday Then n = n + 1 Next     Workbooks(book1).Activate Sheets("A").Select 'コピー座標の取得 iti1 = Range("D65536").End(xlUp).Address '----D列の最終行から上方向の終端セルを選択 ITI7 = Range(iti1).Offset(, 9).Address Range("a5", ITI7).AutoFilter FIELD:=7, Criteria1:=myday ITI2 = Range("M65536").End(xlUp).Address '----M列の最終行から上方向の終端セルを選択 'コードコピー ITI5 = Range(ITI2).Offset(-n + 1, -10).Address '左上のセル>>>>>>>>>ここでアプリケーション定義又はオブジェクトの定義エラーがおこります。 ITI6 = Range(ITI2).Offset(, -9).Address '右下のセル Range(ITI5, ITI6).Copy 'scと銘柄コード貼り付け Workbooks(book3).Activate Sheets("記入").Select ITI3 = Range("c65536").End(xlUp).Address '----C列の最終行から上方向の終端セルを選択 ITI8 = Range(ITI3).Address '終端セルの次を選択 Range(ITI8).Offset(1).PasteSpecial Paste:=xlPasteValues よろしくお願いします。 まだ何本かVBのプログラムがあるのですが移行に際しての注意などがあるサイトがあったら教えてください。

  • エクセル2013VBでオーバーフロー

    よろしくお願いします。 エクセル2007で動いていたVBを2013で動くようにしているところです。 下記のVBを動かしたところ最終行のところでオーバフロー エラーが出ました。 'オーフィルターの設定 Workbooks(book1).Activate Sheets("A").Select iti1 = Range("b65536").End(xlUp).Address '----b列の最終行から上方向の終端セルを選択 ITI7 = Range(iti1).Offset(, 11).Address Range("a8", ITI7).AutoFilter FIELD:=5, Criteria1:=format(myday,"yyyy/m/d) >>>>>オーバフロー 2007では動いていたのですが 対処方法を教えてください。

  • Excel VBAの相対参照について

    Excelで相対参照を勉強しようと思い、 A3を選択後 1.A3:F3を選択 2.A3:F3に黄色の網かけを設定 3.A5を選択 を相対参照で記録しました。(記録は1.~3.までです) VBAを確認すると Sub 罫線() ActiveCell.Range("A1:F1").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ActiveCell.Offset(2, 0).Range("A1").Select End Sub という記述があったのですが、 なぜ、ActiveCell.Range("A1:F1").Selectと ActiveCell.Offset(2, 0).Range("A1").Selectというものがあるのでしょうか。 僕は、A1:F1の選択はしていませんし、網掛け後はA5を選択しているのに Range("A1").Selectの記述もよくわかりません。 ActiveCell.Offset(2, 0).Range("A1").Selectというのは 「選択したA1のセルから2行下、0列めを選択」と読めそうですが、 相対参照ならではの記述があるのでしょう。 ご存知の方、教え下さい。

  • VBAで複数の行のナンバーを取得し、その行の列の値を参照して値を入れる

    下記のことをしたいのですが、調べてもわかりません。 どなたか教えてください。 よろしくお願いします。 内容: エクセルシートのA列の値が11である行ナンバーを取得(複数ある可能性があります)する。 その行のE列(5列目)の値と他のテーブルの値を参照して所定の値をA列の値が11である行のE列(5列目)に返す。 以下のVBAを書いてみましたがうまくいきません。 ----------------------------------------------------------------- Dim ROWCOUNT As Integer Dim row_array() As Variant Dim i As Integer '全行数を取得 ROWCOUNT=Worksheets("sheet1").Range("A1",Range("A65536").End(xlUp)).Count For i = 1 To ROWCOUNT If Cells(i, 1).Value = 11 Then Cells(i,1).Offset(0,5).Value=WorksheetFunction.VLookup(Cells(i, 1).Offset(0, 5).Value, Worksheets("sheet2").Range("A1:H1786"), 3, False) End If Next I

  • エクセルの参照について

    エクセルの参照ついて教えてください。 仮にA列の5行目からA列の300行目まで、あるデータが入っているとします。 このデータを使い、 H列の5行目に=A5、I列の5行目に=A6、J列の5行目に=A7と言うふうに手動で参照しているのですが、簡単に出来る関数などはないでしょうか? よろしくお願いします。

  • EXCEL VBAマクロについて質問です

    Excel VBAマクロについて質問です ※Excel Ver.は2005でやってます 例のような感じで、 同じ列(列1)に或る同じ列名の数字(列2)を足して 違うセル、または違うブックの指定行に合計値を横並び表示させたいのですがうまくいきません 例のように 同じ言葉が含まれているもの(りんご・青りんご)は足して出したいと思ってます 【理想】実行前 ****************************** 番号  名前  個数 001   りんご  1 002   ばなな  2 003   いちご  3 001   青りんご 2 ****************************** 【理想】実行後 ****************************** 番号   りんご  ばなな  いちご 001    3      -     - 002    -      2     - 003    -      -      3 ****************************** ※「-」記号はついてなくても大丈夫です 現在、組んでいるコード・実行結果をのせておきました どなたか享受ください、お願いいたします j = 1 For i = 0 To Range("A65536").End(xlUp).Row cnt = cnt + Range("列2" & i).Value If Range("C" & i + 1).value <> Range("C" & i).value Then 'もし次の行が違う名 Range("任意セル" & j).Value = Range("A" & i).Value '列1 Range("任意セル" & j).Value = Range("B" & i).Value '列2 Range("任意セル" & j).Value = cnt '数字合計 j = j + 1 '出力行カウントアップ cnt = 0 End If Next

  • Excelで、数値データとして参照したいのに、文字列データとしてしか参照してくれません

    Excelで、ある数式セルに表示されたデータを、数値データとして参照したいのですが、どうやっても文字列データとしてしか認識してくれません。 具体的に書くと、 例えばセルA1に、FIND関数で他のセルから抜き出した半角数字のみのデータを表示しているとします。 そのA1の数値を、今度はセルA2で、 if(A1=1000,A1*2,A1/2) などと数式で参照したい時に、私のExcel(2002です)では、どうやってもA1=1000という条件式をきちんと判別してくれません。どうやら、FIND関数で抜き出したために文字列データとして扱われてしまっているようです。 その証拠に、A1が実際に「1000」の時に if(A1="1000",A1*2,A1/2) という風に1000をダブルクォーテーションで囲んで式を書くと、きちんとA1*2を実行してくれます(つまり、A1が実際に1000の時でも条件式の1000をダブルクォーテーションで囲まないと、きちんと判別してくれないという事です)。 この状態から抜け出せずに、どうにも困っています。 どうにかA1の「1000」というデータを文字列でなく数値データとして条件式で利用できるように出来ないものでしょうか。 乱文ですみませんが、よろしくお願いいたします。

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。

  • エクセルの複数シートで支払調書を作成したい 2 

    http://oshiete1.goo.ne.jp/qa2525609.html の続きです・・・ リストのシートをを参照させて、別シートの支払調書にデータが 全部入るような感じで作成したいと思っています。 リスト    A列  B列         C列    1行 名前  住所      支払い総額・源泉税額(2行目)   2行 鈴木  千葉県・・    1,000 3行               100 4行 山田  東京都…    1,000 5行               100   支払調書 G4:住所 G5:名前 I7:支払い総額 M7:源泉税額  作成したマクロの一部です。 記載していない箇所は前回のものを使わせていただきました。 For Each R In S.Range("A2", S.Range("A2").End(xlDown)) With Worksheets("支払調書") .Range("G5").Value = R.Value .Range("G4").Value = R.Offset(0, 2).Value .Range("I7").Value = R.Offset(0, 15).Value .Range("M7").Value = R.Offset(1, 15).Value 前回のものをそのまま使わせて頂き、作ってみたのですが 支払調書のM7のセルに源泉税のデータが入りません。 どのように直せばいいのでしょうか。 教えてください!

専門家に質問してみよう