• ベストアンサー

エクセルのデータ処理

A列に単語が100ほどあります。 この中から特定の字(aとか bを含む単語をB列に選びだし、C列にその字の前からの位置を出したいのです。2字の場合は先頭でよい。 VBAで組むことはできますか、教えてください。 よろしくお願いします。 A     B C aを含む語 前からの位置 dog    cat      2 cat      map      2 desk      table     2 map      miracle    4 table      weather    3 miracle      calendar    2 (2と7) weather cloth calendar

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

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

A列の単語でa~zをそれぞれ含んでいるものをB列以降に、 順次抽出と開始位置を書き出す。 B列以降の1行目に検索した文字を書き出す。 Sub test2()  Dim re As Object  Dim Matches As Object  Dim i As Long, j As Long, k As Integer  Dim R_max As Long, st As String  Dim v, x  With ActiveSheet       v = .Range(.[A2], .Cells(Rows.Count, 1).End(xlUp)).Value       ReDim x(1 To 52, 1 To UBound(v, 1))       Set re = CreateObject("VBScript.RegExp")              For k = 1 To 26           st = Chr(k + 96)           .Range("B1").Offset(, (k - 1) * 2).Value = st           re.Pattern = "[" & st & "]"                  For i = 1 To UBound(v, 1)               If re.test(v(i, 1)) Then                  Set Matches = re.Execute(v(i, 1))                  j = j + 1                  x(k * 2 - 1, j) = v(i, 1)                  x(k * 2, j) = Matches.Item(0).FirstIndex + 1               End If           Next           If R_max < j Then R_max = j           j = 0       Next       ReDim Preserve x(1 To 52, 1 To R_max)       .Range("B2").Resize(R_max, 52).Value = Application.Transpose(x)  End With  Erase v, x  Set re = Nothing  Set Matches = Nothing End Sub こうゆう事ですか?

ei60
質問者

お礼

わぁ~、一発で見事に並びました。プログラムというのはすごいですね。 度々お手数をおかけして申し訳ありませんでした。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

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

ANo.2です。 >欲張って横の列に b から z までを抽出することもできますでしょうか。 それはANo.3さんが提示されている表のように、1行目に検索文字があり 抽出された文字と文字位置をB列から右に順次表示したいと 言う事ですか? 具体的な例題(レイアウト:表)を提示して頂けますか?

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

例データ A列 dog cat desk map table miracle weather cloth calendar catakata ーーー VBAコード 標準モジュールに Sub test01() d = Range("A65536").End(xlUp).Row k = 1 '第2行から書き出す準備 For i = 1 To d s = 1 '最初の文字から検索準備 p = 1 'とりあえずpを0以外にセット j = 2 '文字位置はB列からセット開始準備 fst = "Y" '最初の文字探索場面のフラグ Do p = InStr(s, Cells(i, "A"), "a") If p = 0 Then Exit Do If fst = "Y" Then k = k + 1 '最初は1行下をポイントし書き込み準備 Cells(k, j) = Cells(i, "A") '単語をセット End If Cells(k, j + 1) = p '文字の位置セット s = p + 1 '見つかった次の文字から探索準備 j = j + 1 '次列にセット準備 fst = "N" Loop Next i End Sub 短いけれどロジック(コントロール)はややこしいと思うかも。

ei60
質問者

お礼

回答ありがとうございました。 みなさんのお力でうまく解決できました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • q-0-p
  • ベストアンサー率0% (0/1)
回答No.3

'********************************* Sub test()  Dim ws1 As Worksheet  Dim row1, row2 As Integer  Dim kye As String     Set ws1 = Sheets("sheet1")     row1 = 2   row2 = 2   kye = ws1.Cells(1, 1)   Do Until IsEmpty(ws1.Cells(row1, 1))    If ws1.Cells(row1, 1) Like "*" & kye & "*" Then     ws1.Cells(row2, 2) = ws1.Cells(row1, 1)     ws1.Cells(row2, 3)=Application.WorksheetFunction.               Find(kye, ws1.Cells(row2, 2))     row2 = row2 + 1    End If    row1 = row1 + 1   Loop End Sub '******************************************   A     B      C 1 a 2 dog    cat     2 3 cat    map     2 4 desk   table     2 5 map    miracle   4 6 table   weather   3 7 miracle  calendar   2 8 weather 9 cloth 9 calendar これでいかがでしょうか?

ei60
質問者

お礼

回答ありがとうございました。 みなさんのお力でうまく解決できました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

変数STにセットした文字にて処理を実行する。 1行目は項目行と判断したので、データ処理は2行目以降で 行なってます。 Sub test()  Dim re As Object  Dim Matches As Object  Dim i As Long, j As Long, st As String  Dim v, x  With ActiveSheet       v = .Range(.[A2], .Cells(Rows.Count, 1).End(xlUp)).Value       ReDim x(1 To 2, 1 To UBound(v, 1))       Set re = CreateObject("VBScript.RegExp")              '探したい文字を変数STに代入       st = "a"       re.Pattern = "[" & st & "]"              For i = 1 To UBound(v, 1)           If re.test(v(i, 1)) Then              Set Matches = re.Execute(v(i, 1))              j = j + 1              x(1, j) = v(i, 1)              x(2, j) = Matches.Item(0).FirstIndex + 1           End If       Next       ReDim Preserve x(1 To 2, 1 To j)       .Range("B2").Resize(j, 2).Value = Application.Transpose(x)  End With  Erase v, x  Set re = Nothing  Set Matches = Nothing End Sub

ei60
質問者

補足

早速にご回答いただきありがとうございました。 一瞬で見事に現れたので感動しました。 欲張って横の列に b から z までを抽出することもできますでしょうか。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.1

◆VBAではなく、関数ですが(作業列による方法です)    A    B        C        D     E 1     aを含む語  前からの位置 2  dog   cat        2 3  cat   map        2             3 4  desk   table       2 5  map   miracle     4             5 6  table  weather     3             6 7  miracle calendar     2             7 8  weather                        8 9  cloth 10  calendar                       10 E2=IF(COUNTIF(A2,"*a*"),ROW(),"") ★下にコピー B2=IF(ROW(A1)>COUNT(E:E),"",INDEX(A:A,SMALL(E:E,ROW(A1)))) ★下にコピー C2=IF(B2="","",FIND("a",B2)) ★下にコピー

ei60
質問者

お礼

関数でできるとは思いませんでした。 うまくできるものですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 英単語データの1字変換

    A列に単語データがあります。 下のようにそれぞれ1字を○に置き換えて、それらをB列以下の5列に並べたいのです。 A列    B列    C列    D列     E列     F列 dark   dar○    da○k   d○rk    ○ark    ○ark  horse   hors○   hor○e   ho○se   h○rse    ○orse create   crea○e   cre○te   cr○ate   c○eate   ○reate 6字以上の単語は5文字目から順次、先頭の字まで○になるようにします。 よろしくお願いします。

  • エクセルで重複したデータの処理をしたい

    お世話になります。 A列はランダムに数字が入っています。(並び替えはされていない) このA列の数字は重複するものがあります。 A列の中で重複する場合に、上から順に1/3,2/3,3/3などになるようにしたい。 例) A1:1 A2:2 A3:1 A4:3 A5:1 A6:2 A7:4 のとき 1は3つ出てくるので1/3,2/3,3/3 2は2つ出てくるので1/2,2/2  3,4は1つなので空白にする。 このときB列に分子を、C列には分母を入力する。 この例の場合、B1:1 C1:3 B2:1 C2:2 B3:2 C3:3 B4:空白 C4:空白 B5:3 C5:3 B6:2 C6:2 B7:空白 C7:空白 と入力されるようにするにはどういう計算式をB列、C列に入れておけばよいのでしょうか? Excel2002です。 実際はかなりの量があります。 よろしくお願いします。

  • エクセルでのデータの並び替え

    A列に英単語のデータが1000 あります。 これを  A列   b列   c列 1    1      4 2    2      5 3    3      6 4    7     10 5    8     11 6    9      12 7     13     16 8     14     17 9     15     18 と2列に6つずつのグループに並び替えたいのです。 エクセルの扱いがよくわからないので困っています。 うまい方法を教えてください。よろしくお願いします。

  • Excelでのデータ処理について。

    お世話になります。 データ処理を迅速に行うために試行錯誤しているのですが、 知識が浅く上手くいかないので、皆様のお知恵をお貸し下さい。 下に粗末ではありますが、例として略図を載せます。 セルA1からA100に20から50の値がランダムに値が入っています。 少し離れたところに条件表としてCとDに値を入れます。 そこで、セルA1の値がC列のいづれかと同じだった場合(ここではC2)、 それに隣接するD列の値(ここではD2)をB列に代入する方法は ありますでしょうか? わかりずらい説明で恐縮ですが、ご存知の方いらっしゃいましたら ご教授お願いします。     A  B  C  D  1  21    20  10.2  2  30     21  10.4  3  45     22  10.8  4  32    23  10.9  5  28    24  11.0      ・    ・      ・   50  30.2 100  49

  • エクセルデータの並び替え

    A列に 1 2 3 4 5 6 7 ・・・・・ B列に a b c d e f g h i j k l ・・・・ と文字列があります。 これを C列に 5つずつデータをセットにして並べたいのです。 A列    B列           C列 1     a      1 a   2 b  3 c  4 d  5 e 2     b      6 f   7 g  8 h  9 i  10 j 3     c      11 k  12 l  13 m  14 n  15 o 4     d      16 p   17 q  18 r  19 s  20 t 5     e      以下同じように続く 6     f 7     g 8     h 9     i 10     j 11     k 実際のC列のデータは トマト tomato  ネコ cat   机 desk  いす chair  かばん  bag  のようにしたいのです。 関数の扱いがわからずに苦戦しています。どうぞ、よろしくお願いします。

  • エクセルで自動的に印をつける方法

    エクセル(以下の図参照)でAとBのセルの内容が同じの時もしくは文字列の中に「?」マークがある時、Cのセルに「x」をつけたいのですが、マクロもしくはPerlのプログラムで自動的に処理する方法がありますか?あれば教えて頂きたいです。よろしくお願いします。 A B C 1 123ab 123ab x 2 abc acd 3 abcd ad?d? x 4 dog dog  x 5 cat chat

    • ベストアンサー
    • Perl
  • エクセル カレンダー入力で教えてください

    カレンダー入力で A列B列C列があってA列に和年号 B列月 C列日としてあります 例えばA1のセルをクリックするとカレンダーが出てきて日付け平成20年10月31日をクリックするとA1に20 B1に10 C1に31 と各セルに値が入るようにしたいのですが ご教授お願いします。

  • エクセルでデータ管理

    こんにちは いつもお世話になっています エクセル(2003)のデータ管理について教えてください。 以下のような英語単語帳データ(文字列)がA列にあります。   A 1 出典A 2 単語 3 出典A 4 単語 5 出典B 6 単語 7 出典A 8 単語 9 出典C 10単語 (以降2000行以上あります。) 出典とは、その下の単語の出典になります。つまりA1とA2はセットになっており、以下、同じ仕様です。出典は数十種類あり、出現順序は不定です。単語は同じ出典、あるいは異なる出典で重複して出現することがあります。 ここで、質問ですが、上記のデータから出典別の単語帳をつくる方法を教えてください。 つまり、出典Aの単語、出典Bの単語というように抽出したいのです。重複データが並んでもかまいません。 素人考えでは、A2の単語をB1に引いくる関数で、出典と単語を横並びにしてから、A列にソートをかければいいかと思うのですが、その関数もわからないし、もっとスマートにできるのでしょうか。 わかりにくい表現で恐縮です。 どうぞよろしくお願いいたします。

  • エクセルのデータ処理で困っています

    あまりエクセル関数に詳しくないので困っております。 2点ほど質問があるのですが… 1. B1セルから横に    [A], [B], [C] , [D] , [E] , [F] [1]      , mikan, ichigo , - , mikan , - [2]      , - , ichigo , ichigo , ichigo, -    と入っています。 (桁がずれて表示されてしまうので、セルの区切りにカンマを入れました。見えづらくてすみません。以下の表も同様です)   この時、各行毎に、入力されているデータ(ハイフンは除く)が同じものであるかどうかを判定し、同じであれば●を、違うものが混じっていれば×を、[A]列に入力したいのです。  結果としては[A1]が×、[A2]が●となればよいのですが…  if(B1=C1=D1=E1=F1,"●","×")と入れてみましたが、"-"をどう処理すればよいのかわからず、お手上げです。 2. B1セルから横に   [A], [B], [C], [D] [1]     Q05 ,   mikan , orange [2]     P05 ,   mikan , orange [3]     S12,   りんご,   apple [4]     R09,   ぶどう,   grape [5]     P10 ,   ringo, apple [6]     S16,   りんご,   apple [7]     P30 ,   みかん,  orange [8]     T42 , ミカン,  orange と入っています。  [A]列に重複の有る無しを入力したいのですが、条件があり、  まず、[D]列が同じものであること、  次に、[B]列の数字部分が等しくないものについて、  上から順番に、重複1、重複2,…と[A]列にいれていきたいのです。  [A]列にはすべて同じ式を入れますが、重複でないセルは"" になるように設定していただくと助かります。 結果として、      [A], [B], [C], [D] [1] 重複1, Q05 , mikan, orange [2]   ,  P05, mikan, orange [3] 重複2, S12, りんご,   apple [4]   ,   R09, ぶどう,   grape [5] 重複2, P10 , ringo, apple [6] 重複2, S16,   りんご,   apple [7] 重複1, P30 , みかん,  orange [8] 重複1, T42, ミカン,  orange   このようになれば、と思っています。  これについては、頭の中が混乱して、お手上げ状態です。   未熟者なので、関数でご教授いただければありがたいですが、もし無理なようであればVBA でも… よろしくお願いいたします。

  • Excel VBAでデータを自動処理したい

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。

このQ&Aのポイント
  • デザインの学校で制作した8ページのBookletを光沢紙で印刷しようとしたが、ブラザー製品DCP-J988Nでは両面印刷ができず困っている。
  • 印刷用紙はElecomのスーパーファイン紙を使用し、印刷設定を両面印刷にしているが、うまく両面印刷できない問題が発生している。
  • さらに、黄色い色が黄緑色に変わってしまうという色の変換の問題も発生している。
回答を見る

専門家に質問してみよう