• ベストアンサー

split関数で区切り文字がない場合

b=111.222 a = split(b , ".") ⇒ a(0) = 111 a(1)=222 b=333 a = split(b , ".") ⇒ a(0) = 333 a(1)=333 このような結果が得られるのでしょうか。 それとも区切り文字がない場合、a(0)、a(1)を使用するとコンパイルエラーでしょうか。

  • craftx
  • お礼率48% (388/806)

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

やってみればいいと思うが・・・。 b=111.222 a = split(b , ".") ⇒ a(0) = 111 a(1)=222 これはいい。 b=333 a = split(b , ".") ⇒ a(0) = 333 a(1)=333 「実行時エラー'9':インデックスが有効範囲にありません。」 なお、Split関数は、文字列を扱うのだから、 dim a() as string,b as string b="111.222" a = split(b , ".") のように指定した方がいいと思うが、どうだろう。

craftx
質問者

お礼

ありがとうございます。 まだ環境が整ってなくコンパイルできません。言語はvb.netです。 実は体重を入力して、整数部2桁、小数点1桁の入力チェックを行うため、 split関数を使用して、その後に入力チェックを行うようにしていました。 皆さんの回答からすると、a(0)、a(1)を入力チェックしているので 小数点が入力されなかった場合にコンパイルエラーになってしまいます。 入力チェックを行う前に、入力された文字列に対して Containsを用いて小数点が含まれているかのチェックをするのが最善でしょうか。

その他の回答 (3)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

NO1です。 UBound ( a )で配列の要素数(0相対)が判るので文字列判定しなくてもよいと思いますが如何でしょうか。

craftx
質問者

お礼

ありがとうございます。 まとめまして再度確認させていただきます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

VBAか.NETか質問に明記してほしいが。 VBAなどでは、こういう場合のことのためにUBOUND()があるのを知らないのかな。 Sub test01() a = "333" 'a = "333,2" x = Split(a, ",") For i = 0 To UBound(x) MsgBox x(i) Next i End Sub をやってみればわかる。適当な例を'a = "333,2"のところに入れて、他をコメントアウトして実行してみたら。 ーー VB.NET系では http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard27.htm など参照。Length。

craftx
質問者

お礼

ありがとうございます。 まだ環境が整ってなくコンパイルできません。言語はvb.netです。 実は体重を入力して、整数部2桁、小数点1桁の入力チェックを行うため、 split関数を使用して、その後に入力チェックを行うようにしていました。 皆さんの回答からすると、a(0)、a(1)を入力チェックしているので 小数点が入力されなかった場合にコンパイルエラーになってしまいます。 入力チェックを行う前に、入力された文字列に対して Containsを用いて小数点が含まれているかのチェックをするのが最善でしょうか。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

a(0)はOK、a(1)は実行時エラーです、ご自身で検証すればすぐに判ります。 それで真のご質問は何でしょうか?

craftx
質問者

お礼

ありがとうございます。 まだ環境が整ってなくコンパイルできません。言語はvb.netです。 実は体重を入力して、整数部2桁、小数点1桁の入力チェックを行うため、 split関数を使用して、その後に入力チェックを行うようにしていました。 皆さんの回答からすると、a(0)、a(1)を入力チェックしているので 小数点が入力されなかった場合にコンパイルエラーになってしまいます。 入力チェックを行う前に、入力された文字列に対して Containsを用いて小数点が含まれているかのチェックをするのが最善でしょうか。

関連するQ&A

  • 任意の区切り文字でsplitする方法

    VBAで任意の区切り文字でsplitする方法を教えてください。 例えば 123 456 789 333 3444 66 65 22 といようなスペースあるいはタブで区切られたテキストデータがあるとします。 これを配列に格納したいのですが、 この区切りがタブ一つとか、スペース一つとか決まっていれば split関数で簡単に配列に格納することができますが、 タブかも知れないし、スペースがかも知れないし その数も未定の場合にはどうしたら良いですか? replace関数を使って、まず全てのタブをスペースに変換し その後に、複数のスペースを一つのスペースに変換し 最後にsplit関数を使うという方法しかないでしょうか? もっとスマートな方法があれば教えてください。

  • タブの場合→A = split(B,",")の、split、の書き方

    Bに、aaaa,bbbbbb,ccccc、があれば A(1)に、aaaa、が入ります カンマ区切りのデータが切り離されます ところが、カンマ区切りでなく、 タブ区切りの場合はどう記述するのですか タブのアスキーコード(内部コード)は09です Bには aaaa bbbbbb cccccc のように入っています A = split(B,",")のカンマのところはどう記述  するのでしょうか、よろしくお願いします

  • vba split関数 コンマ区切り

    エクセルに不慣れなため教えていただけたら幸いです。 A3~A11・B3~B11・C3~C11列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してE~H列・J~M列・O~R列に表示したいと考えています。 先ほど別の質問で下記のマクロを教えていただいたのですが、 その際は、A1~A9にあるものをD~G列に表示するというものでした。 よくよく考えると、A列のみではなく、B・C列と複数の列を コンマ区切りしたいと考えています。 このような場合は、どうしたらよいでしょうか。 vba不慣れなためわかりづらかったら申し訳ありません。 お分かりになられるかたがいらっしゃいましたら教えていただけますでしょうか。 よろしくお願いいたします。 Option Explicit ' Sub Macro1()   Dim Rout As Long   Dim Colu As Integer   Dim Expression As Variant '   For Rout = 1 To Cells(Rows.Count, "A").End(xlUp).Row     Expression = Cells(Rout, "A")     Expression = Split(Expression, ",") '     For Colu = 0 To UBound(Expression)       Cells(Rout, Colu + 4) = Expression(Colu)   Next Colu, Rout End Sub

  • join と split で文字列を操作する場合

    にんにちは、 うまく解決する方法を思いつかないので、質問させてください。 以下のスクリプトを実行すると、a から z を * で join して、 その後、* で split するかなと思ったら、split は正規表現として とらえるためでしょうか、エラーになります。 #! /usr/bin/perl -w use strict; my $a = '*'; my $b = join $a , ('a'..'z'); print "$b\n"; my @result = split /$a/,$b; print "$_\n" foreach @result; exit(); $a = '\*'; にすると、split したときに、 余計な \ が残ってしまいます。 任意の(書く時点では分からない)いろんな文字列で 連結したり分割したりする場合のスマートな方法が ありましたら、教えていただけませんか? Perl 5.8 です。お願いします。

    • ベストアンサー
    • Perl
  • split関数について

    split関数についての質問なんですが・・・。 例えば moji=A\B\C\\ a=split(moji,\') としたときにの Ubound(a)=3 ではないのでしょうか? どうも、Ubound(a)=2となるのですが・・・。

  • (VBA)Split関数を使った文字列の区切りについて教えて頂けますでしょうか?

    VBA初心者でSplit関数を使った文字列の区切りがどうしてもうまくいかず非常に困っております。 アドバイス頂けますでしょうか。宜しくお願い致します。 詳細を説明させて頂くと、 (1)エクセルシートのA2セルからA??までの各セルにスペースを含んだ文字列がそれぞれ入力されており、そのそれぞれのセルをスペースで区切ってまず表示させる。 ※データは常にシートのA2からはじまりA3, A4,・・・と不特定に数十行あります (具体例は添付ファイルをご覧頂けますと幸いです。※画像が多少見づらいのですが、画面上のほうがもともとの表で、下の方が完成させたいイメージです。) そして、実際にトライしてみたVBAのソース・・・(本当お恥ずかしいというか 情けないですが。。) Sub data_split() Dim buf As String, tmp, cnt As Long, I As Long cnt = 2 buf = ThisWorksheet.Cells(cnt, 1).Value 'ループ処理(1)(2行目からセルが空になるまで行う処理) Do Until Cells(cnt, 1) = "" cnt = cnt + 1 tmp = split(buf, "") ' データ(文字列)をスペースで区切って出力。 For I = 0 To UBound(tmp) Cells(cnt, I + 1) = tmp(I) Next I Loop End Sub (2)A列からD列までの文字列はそのままで、E列以降(F,G、H・・・)に入った文字列はすべてまとめてE列の各セルに入力させたい。 'AからDまでのセルに入ったセルはそのままでよい。 'E以降の区切られたデータは全部Hセルに入力する VBA初心者なのですが、仕事上、取り急ぎこのようなイメージのVBAを作成しないといけないのですが、本やサイトを見ていろいろと試みているのですがどうしてもうまくいかず非常に困っております。。どうぞ宜しくお願い致します。 参考にしたサイト:http://officetanaka.net/excel/vba/tips/tips62.htm

  • splitの使用方法

    String.split の使用に関してです。 ファイルから一行づつ読み出して split で切って配列にしたいと考えています。 ファイルの中身は 1|ssm3u|00000| 2|ssm3u|11111| のように「|」区切りになっています。 通常のcsv等、カンマ区切りのファイルは split(","); を使用して問題なくできたのですが、 split("|"); と書くと、 「|」ではなく、1文字ごとに切ってしまいます。 どうすれば「|」ごとに切ることができるのでしょうか? あるいは、私のプログラム記述ミスでしょうか?

  • splitについて教えていただきます

    もし、区切り記号は","なら、下記(1)ように書けば結構ですが、今のデータは(2)のようなものです。つまり区切り記号は" "(スペースではなく、TABです)です。 どう書ければ良いですか。 (1) a = split("abc,def,123", ",") | |_ 区切り記号 |_ データ列挙 (2) あ い う え お 以上、宜しくお願いいたします

  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • Pythonでsplit()が効きません…

    ローカルに保存したtxtファイルから文字列を読み込んで、その文字列をsplit()したいのですが何故だか出来ません。 何が原因と考えられるか、教えてください。 >>>f = open('./local.txt', 'w') >>>f.write('1234@5678') >>>f.close() >>>f = open('./local.txt', 'r') >>>print f.read() 1234@5678 >>>a = f.read().split('@')[0] >>> print a >>>b = f.read().split('@')[1] IndexError: list index out of range ※ print a の出力結果は空でした。 f.read().encode('utf-8').split('@')も同様の結果となりました。

専門家に質問してみよう