• ベストアンサー

VBAマクロの文字列認識について

kmb01の回答

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.3

>これはどういう現象なのでしょうか? 表示される桁数にかかわらず、Excel では 15 桁までの精度の数値が格納されます。数値の桁数が 16 桁以上の場合、16 桁目以降の値はゼロ (0) に変換されます。 前者は代入時にDataが数値であると認識され16桁以降が0になっています。 後者は代入時にDataが文字列であると認識されそのまま格納されます。 16桁以上の数値データを文字列としてセルに代入するには、書式を文字列にするかデータ頭に'を付けるかしかないようです。

関連するQ&A

  • エクセルのマクロ(VBA)の変数でスペースを認識しません

    お世話になります。エクセルのマクロ(VBA)を組んでいてどうしても解せないことがあります。 Data1 = "9" Data2 = "               "(←スペースはとりあえず半角30文字とでもしておきます。) Data = Data1 & Data2 Range("a1").Value = Data 上記の命令を実行すると、9のあとに半角スペースが30文字分ある文字データが入力されると思うのですが、実際には9の数字データだけが入力されてしまいます。つまりスペースだけのData2という変数は無視されているみたいです。 一方、2行目を例えば Data2 = "               x" と、スペースのあとに一文字入れるとA1カラムには "9               x" と表示されます。 これはどういった現象なのでしょうか?また、スペースだけの文字列を変数として認識させるのはどうすれば良いのでしょうか? よろしくお願いします。 ※この質問を書いていて変に思いました。質問の文中にあるダブルクォーテーションの中のスペースは半角で入力すると全て無視されて""となってしまいます。全角で15文字分のスペースを入れたら入りました。この辺も同じような理由によるものでしょうか・・・

  • マクロでシリアル値を文字列にしたい。

    マクロでシリアル値を文字列にしたい。 すみません、マクロでシリアル値を文字列に変えたいと思っています。 Range("A1").Value = Format(Now,"yyyy年") とすれば現在の日付のデーターが文字列になるのですが、これを例えば、B2にシリアル値で日付が入力されていてA1文字列に置き換える方法はあるのでしょうか?出来れば記述の仕方を教えていただきたいのですが宜しくお願いします。

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

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

  • <文字列マクロについて>

    <文字列マクロについて> 皆さま お力を貸して下さい。 初心者で、何もわからず書いておりますがすみません。 下記の2つのマクロを教えて下さい。 ?横に並んだ「ある行」に在るデータを「列」に変換し、  指定した数だけ並べる    あいうえお    ←A1セルからE1まで5列(これは状況により変わる)       ↓(マクロ実行:3行同じ数だけ並べるという指定)  あ        →A1セルから下にひたすら、同じ文字が続き順に並ぶ  あ  あ  い  い  い  う  う        →A1セルから下に並べる(3行は指定できれば別の数字にも変えたい  う  え  え  え  お  お  お ?規則的に並んだデータのまとまりをセットで移動する。  例だと5つの塊(これは変数とおきたい)    あ A              a  い B              b  う C               c   え D               d  お E              e    ↓(マクロ実行)  あ  い  う  え  お  A  B  C  D  E      ・  ・  ・  ・    a b c d e    

  • VBAで数値を文字列にして入力したい

    Range("A" & X).Value = Year(Date) Range("B" & X).Value = Right("0" & Month(Date), 2) このVBAでは セルの書式指定で文字列にしても 文字列の指定を外すと数値に戻ります。 でも、文字列の設定を外したら 数値に戻らないものもあり ピボットテーブルで集計した時に 同じ「2013」が2種類存在してしまいます。 どうしたらいいですか?

  • 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

  • エクセルの文字列から数字への変換

    エクセル2007を使用しています。 あるデータベースからデータをエクセルにインポートしたところ、日付データだけが文字列となっています。 (通常数字だとセル内右寄せですが、文字列を示す左寄せになっています) 「03/11/2010」のように一見日付データのように見えるのですが。。 完全なテキストとして認識されているようで、「DATAVALLUE関数」や「1の乗算」も全く反応しません。 文字の先頭に「’」も入っていませんし、どうしたらよいか全くわかりません。 何かよい方法があったら教えて下さい。 宜しくお願い致します。

  • 文字列が数値に変換されない

    文字列の数字をVALUE関数で数値に変換したくても数値になりません。 ♯N/Aと表示されるだけです。 関数を入れたあとに表示形式を数値にしても変わりません。 元の文字列はVLOOKUP関数で検索した数字です。 これができないと仕事が進みません。急いでます。お願いします。

  • マクロ(VBA)での文字列操作

    こういうことできますか? Dim str as String str = Cells(1, 10) Length = Find("会計", str) つまり、エクセル上のセル内の文字列を取ってきて、 会計という文字列を含む場所が何文字目か知りたい。 ところが、Find関数か認識されずエラーが出ます。 Searchにしても同じです。 エクセル関数としては使えるのですが、マクロでは使えないのですか?

  • 完全に一致する文字列を検索するマクロ文

    For Each rng In Range("B1:B21200") If rng.Value <> "" Then Set out = Range("A1:A2100").Find(rng.Value) If Not out Is Nothing Then igo = out.Address End If Do While Not out Is Nothing out.Font.ColorIndex = 3 Set out = Range("A1:A2100").FindNext(out) If igo = out.Address Then Exit Do End If Loop End If Next このマクロはRange("B1:B21200")でRange("A1:A2100")を検索し一致する文字列を赤文字(A列の文字)にするのですが このマクロだと、あいまいな検索になってしまいます。 完全に一致する文字列のみ赤文字にするマクロ文を知りたいのですが。