• ベストアンサー

VBAで区切り文字について

セルに「○○○/△△△/×××_◇◇◇」もしくは「○○○/△△△/×××_◇◇◇」という形式でデータが入力されています。 ユーザが対象セルを選択して、ワークシート上のボタンをクリックすると、各変数に下記のようにVBAで値を代入させたいのですが、 どのようにしたらよろしいのでしょうか。 basyo1 = ○○○ basyo2 = △△△ basyo3 = ◇◇◇ ご教授下さい。

  • gazo
  • お礼率30% (74/241)

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Sub try() Dim v, w Dim st1 As String, st2 As String st1 = "○○○/△△△/×××_◇◇◇" st2 = "○○○/△△△/×××_◇◇◇" v = Split(Replace(Replace(Replace(st1, "_", " "), "_", " "), "/", " ")) w = Split(Replace(Replace(Replace(st2, "_", " "), "_", " "), "/", " ")) MsgBox st1 & vbLf & v(0) & vbLf & v(1) & vbLf & v(3) MsgBox st2 & vbLf & w(0) & vbLf & w(1) & vbLf & w(3) End Sub basyo1 = v(0) basyo2 = v(1) basyo3 = v(2) とか?

その他の回答 (2)

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

こんな感じでしょうか。 _と_を/に置換し、SPLIT関数で「/」を区切り文字として分割しています。例はfunctionにしましたので、選択したセルを引数として渡してやってください。 Function fSample(rng As Range) Dim basyo() As String Dim sdata As String sdata = Replace(Replace(rng.Text, "_", "/"), "_", "/") basyo() = Split(sdata, "/") basyo1 = basyo(0) basyo2 = basyo(1) basyo3 = basyo(3) End Function

回答No.2

セルA1に対象データが入力されており、 結果をセルB1,B2,B3に表示するものとして、マクロを書きます。 Dim A,B,C Dim AA,BB AA= Application.WorksheetFunction.Asc(A1) BB=Replace(AA,"/","") A=Len(AA)-Len(BB) For B=1 To A C=Instr(BB,"/") Cells(B,2)=Left(AA,C-1) AA=Right(AA,Len(AA)-C) Next B C=Instr(BB,"_") CeLLS(A+1,2)=Right(AA,Len(AA)-C)

関連するQ&A

  • VBAで図に文字を載せたい

    VBA超初心者です。教えてください。 エクセルのセルの値を図に反映させようとしています。 Sheet1にあるデータは __A_____B_______C______D________E______ 5| D - data1 - data2 - data3 - data4 6| 1 - abcd - efgh - ijkl - mnop 7| 2 - kirin - panda - dog - cat 8| 3 - red - blue - green - white ・ ・ ・ このような感じで以下100以上続きます。 これを、例えばID3を選択すると自動的に、図の中にあるテキストボックスに「red」「blue」「green」「white」と値が代入する仕組みを作りたいのです。 現在考えているのは sheet1のとあるセルに数字3と入力してボタンをクリックすると、その数字のIDのデータを読み込んでSheet2!A1に=sheet1!7Bと代入する。(ここができません!) そしてSheet2の図にはテキストボックスを用意して、=Sheet2!A1と記入することでSheet2!A1の値を反映させる。(これはうまくいきました) 扱うデータが多すぎるためID1つ1つにボタンを作成するのは不可能です。 何卒ご教授ください。

  • EXCELのVBAについて

    エクセルのVBAでユーザーフォームに作ったテキストボックスに入力した値を、コマンドボタンによる「実行」とともに別に作った標準モジュールの変数として代入するにはどうすれば良いでしょうか? 具体的な流れは、 マクロ実行  ↓ ユーザーフォーム出現  ↓ テキストボックスに数字を代入→「実行」  ↓ 変数を代入された標準モジュールによる処理完了 というものです。 ご教授お待ちしております。

  • エクセルでの値の自動代入

    エクセルでワークシートのセルからでもユーザーフォームからでもいいのですが、違うワークシート上の表(列が項目、行が日付)の当日日付のセルにマクロで作ったボタンを押すと値が挿入されるような方法はありますか? アクセスで値の代入のようにできればいいのですが。 マクロでもVBAでもいいのですが、できる方法はあるでしょうか?

  • プログラムを終了しても消えない変数

    VBAを使っていて ユーザーフォーム上にボタンを二つ配置します。 ボタン1を押すとsub 1が実行されます。 このプログラムで出力された変数を ボタン2で実行するsub 2で使いたいのですが どうすれば良いですか? sub 1の中でcall subを使ってプログラム2を呼び出すということはしたくないのですが このsub を終了しても変数が消えないようにするには ワークシートのセルに代入するか ユーザーフォームのテキストボックスなどに代入するしかないでしょうか? この変数を外に出さずに隠さずに保存しておき 次のsub で使いたいのですが 何か良い方法はないでしょうか?

  • excelでVBAでユーザーフォームのリストBOX

    下記VBAの作成の仕方を教えていただけないでしょうか。 やりたいこと (1)sheet2のA1セル~A5セルまでの間の間をユーザーフォームのリストボックスに登録する (2)sheet1のA1セルをクリックすると、ユーザーフォームが起動し、任意のリストをクリックすると、 その値がA1セルに格納され。ユーザーフォームが終了する。 ※コマンドボタンは使わずにお願いします。なおexcel2000です。

  • VBA 変数の受け渡し

    エクセルVBAで標準モジュール内でインプットボックスに入力した変数をユーザーフォームに受け渡してユーザーフォーム内のリストボックスに表示させる場合どのように変数の受け渡しを行えばよいか教えてください。 現在は、一度ワークシートの任意のセルに値を書き出し、その後ユーザーフォームのイニシャライズで先ほどのセルから値を受け取るようにしています。 標準モジュールではインプットボックス入力後「UserForm1.Show」でユーザーフォームの立ち上げを行っています。

  • Excel VBAでは可でユーザーは入力不可のセル

    C5のセルはユーザーが入力できて、 C5セルに入力された値に応じてVBAで C7セルに処理した値を表示させたいのですが、 C7のセルはユーザーは入力(選択)できないようにしたいのです。 具体的には、 C5セルの書式設定の保護タブのロックを解除して ホームタブのセルグループの書式▼でシートの保護を選択して 表示される「シートの保護」のダイアログで デフォルトのままOKボタンをクリックすると C5セルのみ入力できて C5セル以外は入力できなくなります。 ユーザーにはこの状態にしておきたいのですが、 VBAでC7セルに入力できるようにする方法はないでしょうか。 (Windos7, Excel2010)

  • VBAで入力規則のリスト参照元の値取得

    エクセル2007を使っています。 VBAツールを作っており、その処理で使われる一機能として 「任意のセルに設定されている入力規則のリストの元の値をVBAで取得する」処理を コード中に書きたいと思っております。 ■質問概要  「入力規則のリスト」が設定されている任意のセルを選択したときに、そのセルに設定されている  「入力規則のリスト」の「元の値」をVBAで取得する方法について教えてください。  ※取得した値は配列型の変数に代入するものとします ■想定イメージ  たとえば、次のようなブックで使うことを想定しております(画像参照)  ※実際はもっとデータ量が多いブックで使う予定です  ・「リスト元の値」というシートで「選択言語」という名前でリストを定義化  ・「通常操作するシート」では値を入力したいセルに対し、「入力規則のリスト」の「元の値」を   「=選択言語」で設定  VBAではこの「通常操作するシート」の入力欄のセルを選択している時に「選択言語」で定義されている  データをすべて取得し配列型変数に代入するという動作をさせたいと思っています。     この方法について教えてくださいますようお願いします。

  • コマンドボタン名の設定で

    お世話になります。 現在EXCELシート上に複数のコマンドボタンを置き、 そのコマンドボタン名をセルの値からとってこようとしています。 これがVBの考えでしたら ************************************************* Dim i as integer 'ループ用変数 '対象セルに値が存在しなくなるまでループ Do While Worksheets("Sheet1").Cells(i, 1) <> "" 'セルの値をコマンドボタン名に代入 Worksheets("Sheet1").CommandButton(i).Caption = Worksheets("Sheet1").Cells(i, 1).Value i = i + 1 Loop ************************************************* のようにできるのではないかと考え、いろいろと試行錯誤しているのですがうまくいきません。 VBAではこのようなやり方はできないのでしょうか? vbのように変数名でループさせるということは出来ないというような情報もあるのですが、出来ればこの考えに似たような感じのプログラムの組み方がしたいと考えております。 どなたかご教授よろしくお願いいたします。

  • Excel-VBA rangeプロパティの使い方について

    Excel-VBA rangeプロパティの使い方について VBA初心者です。いろいろ調べたのですが、分からないので教えてください。 ThisWorkbookのSheet1のA1セルに、aというファイルのaというシートの特定のセルの値をコピーしたいです。 コピーする値のセルは、ThisWorkbookで入力した値を基に変数で記述したいです。 例えば、ThisWorkbookのSheet1のC2セルに「D1」と記載していたとして、その値を変数として設定して、最終的にaというファイルのaというシートの「D1」セルをThisWorkbookのA1セルに貼り付けるのが目的です。 この場合の、下記のhensuu = の設定方法について、ご教授願います。 hensuu = ThisWorkbook.Sheets("Sheet1").Range(“A1”)= Workbooks(a).Sheets(a).Range(hensuu)

専門家に質問してみよう