• 締切済み

文字列検索後にテーブル書き出し処理

VBにて文字列を検索し、必要な情報をテーブルの各々の項目へセットする処理を考えています。 【実際の文字列例】 AAAAA+111,BBB,CCCC+22,DDDD,EEEE,FFFF,GGGG+4444 ・・・ 文字列は1レコードが','(カンマ)で区切られ、 アルファベットが商品番号、数字がバージョンと考えて下さい。 商品番号は必ず存在しますが、バージョンは無い場合もあり、 バージョンが存在する場合は'+'(プラス)で商品番号とセットになる事を表しています。(バージョンが全く存在しない場合もあります) 既に商品番号のみをテーブルへセットする処理があり、その処理は下になります 【商品番号のみの処理】 dim pos1 dim pos2 = 1 dim itemNo LOOP pos1 := INSTR(文字列, ',', pos2); IF pos1 = 0 THEN itemNo := LTRIM(RTRIM(SUBSTR(文字列, pos2))); ELSE itemNo := LTRIM(RTRIM(SUBSTR(文字列, pos2, pos1 - pos2))); END IF; ~itemNoをテーブルへセットする処理~ END IF; EXIT WHEN pos1 = 0 pos2 = pos1 + 1 END LOOP 上記プログラムにバージョンを考慮した場合、どのように変更となるでしょうか?実プログラムをご教授くだされば幸いです。 素人の質問で申し訳ないのですが、宜しくお願い致します。

みんなの回答

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

データに『,』が含まれないなら Splitで分割したほうが簡単ですよ 項目もxxx+nn を分割するなら 同様に Splitで出来ます VB6.0なら dim sItem() as String, n as Integer dim sData() as String sItem = Split( 文字列, "," ) for n = 0 to UBound( sItem )   sData = Split( sItem(n),"+")   if UBound( sData ) > 0 then     ' + があった場合   else     ' +が無かった場合   end if next といった具合です # VBです := は名前つき引数を使う場合です # 単なる代入なら『=』ですよ # 『:=』を使う代入は (Delphiなどの)Pascal系だと思います

関連するQ&A

  • Perlの文字列処理関数?

    Perl5.8も視野にいれた、便利な文字列関数を探しています。 trim rtrim ltrimを行う関数ですが、こういうものは自作するべきでしょうか? VBやPHPには標準であるようですが、Perlは文字コードを備えた一般的なものは 存在するのでしょうか?

    • ベストアンサー
    • Perl
  • C#で string型の文字列で次の3つの処理をしたいのですが、具体的

    C#で string型の文字列で次の3つの処理をしたいのですが、具体的にどう記述すればよいでしょうか? string s = "ABCあいうDEおかFGHき"; int pos1 = ???? //(1)DEの位置を求める int pos2 = ???? //(2)FGHの位置を求める //(3)pos1とpos2を使って「おか」の文字列をtにセットする ????

  • Accessのテーブルの文字列フィールドにVBAでアクセスするには?

    いつもお世話になっております。困っていることがありますので教えていただければ幸いです。 AccessのテーブルAに、メモ型のフィールドBがあり、1000文字くらいの文字が入っています。VBAの関数Cの中でそのテーブルにアクセスし、1000文字をいろいろ処理したいと思っています。見よう見まねで試しに Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim FileNum As Integer Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open テーブルA, cn, adOpenDynamic, adLockOptimistic msgbox !フィールドB としてみたのですが、なぜか255文字までしか表示されません。VBAを用いてテーブル(やクエリ)にアクセスし、256文字以上の文字列を扱う方法はありませんでしょうか? 何かこちらで勘違いしているところがありましたら、ご指摘いただければと思います。よろしくお願いします。

  • 文字列と文字列をつなげるには

    下記のようにプログラムを作りました。 簡略しているのでわかりづらいと思いますが、 文字の配列と文字の配列を文字の配列に格納したいので、 下記のように$arrayに”.=”として文字列を加えて いますが、うまくいきません。 どのようにしたらいいのでしょうか? ご教授お願いいたします。 while($text[$i] != ""){ if($i==1){ $array[$j] = $feild[$j]; $array[$j] .= " "; $array[$j] .= substr($text[$i], $no, $pos); } }

    • ベストアンサー
    • PHP
  • 最終列の列番号を列文字に変換することはできますか?

    例えばaaaがある列を探し、その列番号は4で列文字がDですが、 列番号から列文字をvbaで取得する方法はありますか? Sub Sample() Dim i As Long Dim Colmoji As String i = Rows(1).Find(What:="aaa", LookAt:=xlWhole).Column Colmoji = i 'ここで列文字に変換したい MsgBox i & "の列文字は" & Colmoji & "です" End Sub このようなコードを作ってみたのですが列文字に変換する方法がわかりません。

  • 文字列検索(例えばindex関数)をバイト単位で行いたい

    やりたいことは日本語文字列の処理で、特定の文字を切り抜きたいのですがうまくいきません。 なぜなら、文字列を切り抜くsubstr関数がバイト単位であるのに対し、文字列を検索するindexがバイト単位でおこなわれていないからです。 例: 文字列"12万3456円"から、円だけを取り除きたいとします。 $str = "12万3456円"; $index = index($str,"円"); $newStr = substr($str, 0, $index); indexは7を返すが、substrで0から7番目を切り取っても、バイト単位なのでうまくいきません。 文字列の検索をバイト単位で行う方法を教えてください。 おねがいします。

    • ベストアンサー
    • Perl
  • 文字列で渡された式

    質問です。 タイトルのままですが文字列で渡された式で 処理を決定させることはできるのでしょうか? たとえば ============================ dim str as string = "10 > 5" if strの文字列判定 then msgbox("TRUE") else msgbox("FALSE") end if ============================

  • 文字列のエスケープ処理

    VB6.0を使用してXMLファイルを作成しています。 XMLファイルの値に日本語文字列の場合のみ、エスケープ処理した文字列をセットしなければいけない場所があるのですが、 エスケープ処理した文字列とはどのように実現できるのでしょうか? XML自体があまり詳しくないので、質問内容がおかしいかも知れませんが、どなたかお教えください。 よろしくお願いします。

  • 複数のtableから条件に一致するデータを取り出す方法

    複数のtableから条件に一致するデータを取り出す方法 2つのテーブルから条件に一致するレコードだけを取り出したいです。 MySQLのバージョンは5.0.77です。 ------------------------------------------------------------------- 「テーブル1」 [itemNo] int型 auto_increment [itemName] varchar型 itemNo itemName    flag 1    apple     0 2    orange     1 3    grape     0 4    strawberry   1 5    melon     1 「テーブル2」 [logNo] int型 auto_increment [itemNo] int型 [date] date型 [itemLog] int型 logNo itemNo date    itemlog 1   4   2010/07/28  1 2   2   2010/07/28  2 3   2   2010/08/03  1 4   1   2010/08/04  1 5   4   2010/08/05  2 ----------------------------------------------------------------------- ・テーブル1の「itemNo」とテーブル2の「itemNo」は同じ番号が入ります。 ・テーブル2は1商品に対する履歴用のテーブルなので、同じ「itemNo」が複数存在します。 「検索条件」 1.テーブル1の[itemNo]とテーブル2の[itemNo]が一致 2.テーブル1の[flag]が1のデータのみ表示 2,テーブル2に同一の[itemNo]が複数あった場合、[logNo]が新しい最新のものを取り出す 3.テーブル2に[itemNo]が存在しなくても、flagが1なら取り出す SELECT * FROM `テーブル1` LEFTJOIN `テーブル2` ON (テーブル1.itemNo = テーブル2.itemNo) WHERE `flag` == 1 ORDER BY テーブル1.itemNo DESC; 「実行結果」 itemNo itemName   flag logNo itemNo date    itemlog 2   orange    1   2   2   2010/07/28 2 2   orange    1   3   2   2010/08/03 1 4   strawberry  1   1   4   2010/07/28 1 4   strawberry  1   5   5   2010/08/05 2 5   melon     1    「求める実行結果」 itemNo itemName   flag logNo itemNo date    itemlog 2   orange    1   3   2   2010/08/03 1 4   strawberry  1   5   5   2010/08/05 2 5   melon     1    ご存知の方がいましたら、教えていただけると幸いです。 何卒よろしくお願い致します。

  • エクセル2007VBAで連続データ(文字列)の入力

    ●質問の主旨 エクセル2007のVBAでマクロを作成して 同じ列に次々と文字を入力していくにはどうすればよいでしょうか? ●質問の補足 ワークシートのA列に文字列を入力していくマクロを 作成しようとしています。コードの概要は以下の通りです。 1.1回目の入力でA1セルには文字列を入力 2.1のあとフォーカスがテキストボックスに戻る。 3.2回目の入力でテキストボックスに文字列を入力 4.2回目の文字列がA2セル入力 5.以下2~5が続く ところが4のところでA1セルの内容を消去して 2回目の文字列をそのままA1セルに入力してしまいます。 コードに問題があると考えられますが、 どこに問題があるでしょうか? 以下のコードと添付画像をご参照の上、 ご教示くだされば幸いです。 なお添付画像の内容は、作成目標である A列に次々と文字列が入力されていく「模範解答」です。 ●コード (General)-連続データ入力 Sub 連続データ入力() UserForm1.Show vbModal End Sub (General)-(Declaration) Dim CelNo As String Dim Pos As Integer (UserForm1:UserForm_Initialize) Private Sub UserForm_Initialize() Pos = 1 CelNo = "A" & Pos End Sub (UserForm1:InputBtn_Click) Private Sub InputBtn_Click() With Worksheets("sheet1") .Range(CelNo) = UserForm1.TextBox1.Text Pos = 1 CelNo = "A" & Pos .Range(CelNo).Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox1.SetFocus End Sub (UserForm1:CommandButton2_Click) Private Sub CommandButton2_Click() Unload UserForm1 End End Sub

専門家に質問してみよう