• ベストアンサー

Excelでの文字抽出

おはようございます。 以下のような操作をしたいのですが、 アドバイスをよろしくお願いします。 テキストファイルになります。 変更前 日本,a,b,c 中国,a,d,f,g ソ連,b,f,h 変更後 a 日本 中国 b 日本 ソ連 c 日本 d 中国 f 中国 ソ連 g 中国 h ソ連

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

  • ベストアンサー
回答No.3

Public Sub Test() Const intGStartCol As Integer = 1 'A グループ名開始列位置 Const intGStartRow As Integer = 1 ' グループ名開始行位置 Const intMStartCol As Integer = 1 'A メンバー名開始列位置 Const intMStartRow As Integer = 5 ' メンバー名開始行位置 Dim shtTestIn As Excel.Worksheet Dim shtTestOut As Excel.Worksheet Dim varValue As Variant ' データ取得変数 Dim strGName As String ' グループ名退避 Dim strMName As String ' メンバー名退避 Dim intGCol As Integer ' グループ名列位置 Dim intGRow As Integer ' グループ名行位置 Dim intMCol As Integer ' メンバー名列位置 Dim intMRow As Integer ' メンバー名行位置 '読み込みSheetを設定 Set shtTestIn = Excel.ActiveSheet '書き込みSheetを設定 Set shtTestOut = Excel.ActiveSheet '初期値を設定 intMRow = intMStartRow Do 'メンバーの出力先を初期値 intMCol = intMStartCol + 1 varValue = shtTestOut.Cells(intMRow, intMStartCol).Value If VBA.VarType(varValue) = VBA.vbEmpty Then '値がなくなったら終了 Exit Do End If 'メンバー名退避 strMName = VBA.CStr(varValue) 'グループの読み取り行を初期化 intGRow = intGStartRow Do 'グループの行読み取り varValue = shtTestIn.Cells(intGRow, intGStartCol).Value If VBA.VarType(varValue) = VBA.vbEmpty Then '値がなくなったら終了 Exit Do End If 'グループ名退避 strGName = VBA.CStr(varValue) 'グループの読み取り列を初期化 intGCol = intGStartCol + 1 Do 'グループの列読み取り varValue = shtTestIn.Cells(intGRow, intGCol).Value If VBA.VarType(varValue) = VBA.vbEmpty Then '値がなくなったら終了 Exit Do End If 'メンバーの比較 If VBA.StrComp(strMName, varValue) = 0 Then 'メンバーの横にグループをセット shtTestOut.Cells(intMRow, intMCol).Value = strGName intMCol = intMCol + 1 Exit Do End If intGCol = intGCol + 1 Loop intGRow = intGRow + 1 Loop intMRow = intMRow + 1 Loop End Sub 一応、VBEでソースを書いてみました ソースに手を加えないとだめですが大体の動きはしていると思います。 Office2003で確認しましたが新しい関数を使用してないので大丈夫だと思います

yano-kouichi
質問者

お礼

早速のご回答および 丁寧なご指導ありがとうございました。 おかげさまで、うまくいきました。 本当に感謝です。

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

その他の回答 (2)

回答No.2

はじめまして、marumaru_a_wといいます。 Ecxelですよね? 日本,a,b,c 中国,a,d,f,g ソ連,b,f,h とあるのは ---------------- | A |B|C|D|E| ---------------- 1|日本|a|b|c| | ---------------- 2|中国|a|d|f|g| ---------------- 3|ソ連|b|f|h| | ---------------- 上記のようにすべてセルごとに分かれているのでしょうか? それとも --------------- | A | --------------- 1|日本,a,b,c | --------------- 2|中国,a,d,f,g| --------------- 3|ソ連,b,f,h | --------------- 上記のように1セルに情報がすべて入っているのでしょうか? データの入り方によっても処理が変わってくると思いますのでその辺をはっきり教えてもらえるとアドバイスがしやすくなると思います。

yano-kouichi
質問者

補足

最初の方で、すべてセルごとに分かれています。 よろしくお願いします。

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

Wizard_Zeroと申します。 「アドバイス」と言われても、この処理を最初から最後まで説明すると、結構な量になりますよ・・・。 どこまで考えて、どこが出来ないのか教えてください。 流れを簡単に書くとすれば・・・ 1.文字列配列を用意 2.ファイルを読み込みながら、記号にあわせて配列に分配 3.ファイルに出力

yano-kouichi
質問者

補足

すいません。 流れは以下のようにしたいと思っています。 よろしくお願いします。 まず、グループが日本で、メンバーが、a,b,cという前提になります。 1.最初にシート1にメンバ(a,b,c)を入力しておきます。 2.次にシート2にグループとメンバ(変更前)を出力しておく。 3.シート1のメンバが、シート2のグループ(行を検索)に所属しているか、全部のグループ(行)を検索する。 4.所属しているグループがあれば(一致)、メンバの横のセルに付け加えていく 疑問点 ・行の中に、特定の値が含まれているかを検索する方法

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

関連するQ&A

  • Excelでの文字列編集(再質問です)

    Excel2003での再質問です。 今、A列~E列に以下の文字が入っています。 A  B  C  D  E 1あ い う え お  2あ   う 上記の内容を「・」で区切りを入れて、F列に結合させたいのですが  F 1あ・い・う・え・お 2あ・う この質問に対しては、以下のご回答をいただき、解決することが出来ました。 =SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1&B1&C1&D1&E1,A1,A1&" "),B1,B1&" "),C1,C1&" "),D1,D1&" "))," ","・") このたび、3列増やし、A~Hまでの計算式を以下で行ったところ、 =SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1&B1&C1&D1&E1&F1&G1&H1,A1,A1&" "),B1,B1&" "),C1,C1&" "),D1,D1&" "),E1,E1&" "),F1,F1&" "),G1,G1&" "))," ","・") 計算式がエラーとなります。ご教示いただけますでしょうか? よろしくお願いします。

  • excel 抽出およびその数のマクロについて

      A列           B列       C列           (A列の同じ国名を除く)   その数 アメリカ         アメリカ       6 インド          インド ブラジル         ブラジル 中国           中国         6 中国           カンボジア カンボジア        日本         6 日本           ベトナム 中国           シンガポール ベトナム         マレーシア シンガポール       オーストラリア アメリカ         韓国         3 マレーシア        タイ         2 日本           ドイツ 日本 アメリカ オーストラリア 韓国 アメリカ 日本 中国 日本 日本 タイ アメリカ タイ 中国 韓国 韓国 スリランカ 中国 ドイツ アメリカ  A列について同じ国名のセルを除いてB列のようにあらわすにはどのようにすれば良いですか。また、同じ国名の数、たとえばこの場合は「アメリカ」は6(C列)になりますが、これをあらわすにはどのような関数を使用すれば良いでしょうか。ご教示のほどお願いいたします。  上の質問に対して3人の方からご回答をいただきました。(http://okwave.jp/qa/q9068971.html)本当に有り難うございました。感謝しております。  ただ、このような重複削除、そして国数という同じ作業が150ほどあります。いわゆるA、B、C列の3列のまとまりが150ほどあるということです。  A、B、Cでひとまとまり、D、E、Fでひとまとまり、G、H、I、でひとまとまりという感じで、それがA列~PC列くらいまであります(A、D、Gには国名(最高で25くらい)、B、E、Hには重複削除した国名、C、F、Iには国数です)。  一つ一つ手作業で行うのは面倒ですので、マクロで行いたいと思いますが、その組み方を出来ればご教示をお願いしたいと思います。どうぞ宜しくお願いいたします。  

  • エクセルにて複数セルの並び替え

    こんにちは、エクセルについて教えてください。列はA~Hまで、行は1~200行ほどに値が入っています。 例えばValueが以下のようだとします。 A1 B1 C1 D1 E1 F1 G1 H1 A2 B2 C2 D2 E2 F2 G2 H2 ... これらのValueを、別のSheetに以下のように並び替えたいのですが、 A1 B1 C1 D1 E1 F1 G1 H1 A2 B2 C2 D2 E2 F2 G2 H2 A3 B3 ...と、これがA200~H200の行分まで。なのでPaste後は800行になります。どうにかマクロか何かで簡単に 出来ないかと思い、どなたかご教授いただければと思います、よろしくお願いします!

  • エクセル、任意の「行」だけを抽出したい。

    こんなことできますか? A1:F100のセル内にランダムに数字が入っています。 質問1) この中から 1行目→3行目→5行目と一つ飛ばしで入っているデータを抽出してH1:M100の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 A1-B1-C1-D1-E1-F1 A2-B2-C2-D2-E2-F2 A3-B3-C3-D3-E3-F3 A4-B4-C4-D4-E4-F4 A5-B5-C5-D5-E5-F5 A6-B6-C6-D6-E6-F6 A7-B7-C7-D7-E7-F7 ・・・ A100-B100-C100-D100-E100-F100 の中から A1-B1-C1-D1-E1-F1 A3-B3-C3-D3-E3-F3 A5-B5-C5-D5-E5-F5 ・・・ を抽出して H1-I1-J1-K1-L1-M1 ・・・ H100-I100-J100-K100-L100-M100 の範囲内に表示させたいです。 質問2) 同様に、 1行目→4行目→7行目と二つ飛ばしで入っているデータを抽出してO1:T100の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 ※ 説明がわかりにくいかもしれませんが、よろしくお願いします。

  • 【エクセル】特定の文字列(番号)の行だけ抽出したい

    現在資料を作っていて、またもや困ったことがあったので教えてください。 特定の文字が含まれる行のデータを抽出するにはどうしたらいいのでしょうか。 具体的にいうと ____|A|B|C|D|E| [01]|F|1|0|3|5| [02]|G|0|2|5|7| [03]|H|0|3|4|8|    中略 [21]|F|0|0|9|6| [22]|G|6|4|5|1| [23]|H|3|3|2|2|    中略 [31]|F|2|2|4|6| [32]|G|5|3|7|9| [33]|H|8|2|6|4|    以下略 *[]の中身は行番号 一番上段のA B C D Eは列の軸 |はセルの区切りを示している のような表でGのBのところ(行番号が10n+2のところのA列)だけのデータを合計したいのです。 つまり上の表でいえば =A2+A22+A32+A42+A52…(=0+6+5+…)ということをしたいのですが 数が600行近くあるので手入力だとかなり面倒くさいのです。 SUM関数を使うのかなとも思いましたが、それでもセルの指定の面倒くささは変わらないし… 何か簡単にできるようにする方法がありましたらご教授お願いします。

  • 巨大なCSVの加工(指定列のみの抽出)について

    巨大なCSVの加工(指定列のみの抽出)について 下記のような構成のCSVファイルがあります。 "ID","a","b","c","d","e","f","g","h","i","j","k","l","m" "0001","a","b","c","d","e","f","g","h","i","j","k","l","m" "0003","a","b","c","d","e","f","g","h","i","j","k","l","m" "0004","a","b","c","d","e","f","g","h","i","j","k","l","m" ・ ・ ・ 例えば、 ここから"ID"列と"c"列と"f"列のみ抽出して新たなCSVファイルで保存。 という処理を行いたいのですが、行数が5000万行近くあり、ファイルサイズが80GB程あるので エクセルはおろかアクセスでも開くことができません。 テキストエディタの秀丸64bit版なら開くことができますが、指定列の抽出方法が分かりません。 秀丸のマクロでもVBSでも良く、また膨大な待ち時間がかかっても構わないので実現する方法について お知恵をお貸しください。

  • Excel 重複データの番号を抽出

    Excel:Office2003 OS:WindowsXP excelのデータで A列 B列 1 A 2 B 3 A 4 C 5 D 6 A 7 A 8 B 9 B 10 C 以上のように並んでいるデータを以下の E列 F列 G列 H列 I列 A 1 3 6 7 B 2 8 9 C 4 10 D 5 ようにしたい場合はどのようにしたらいいのか教えてください。 マクロではなく関数で処理をしたいと思っています。 よろしくお願いします。

  • excelのセルの並べ替え。

    Excelの操作で迷っています。詳しい方の知恵を拝借できたらと思います。 以下のようにデータの入力されたセルが並んでいます(アルファベット1文字が1セルです)。 A B C D E F G H I J K 横に何セル並んでいるかは、行によってまちまちです。このようなデータが、数千行あります。これを、以下のように1列に並べ替えたいのです。 A B C D E F G 「行列を入れ替えてコピー」ではなかなかに大変なので、何か良い方法を探しています。よろしくお願いいたします

  • エクセルの関数で抽出

    EXCELで単語テストを簡単に作れないかと試行錯誤しているのですが、 A1 番号   1~2569まで B1 英単語 C1 日本語訳 D1 順位 =RANK(E2,$E$2:$E$2570) E1 乱数 =RAND() F1 選択範囲 F2 選択番号始め F3 選択番号終わり G1 抽出番号(A1~の抽出したもの) H1 選択英単語(B1~の抽出したもの) I1 選択日本語(C1~の抽出したもの) こういうデータがあり、H1~I1にF2とF3で選択した範囲(たとえば10~30等)を入力するとG1~I1にその範囲でランダムに重複ない選択範囲内の問題が抽出されるようなものを作りたいのですが、うまく出来ません。 やり方を教えていただけないでしょうか。よろしくお願いします。

  • エクセル関数について(検索)

    初歩的な質問ですみません。よろしくお願いします 以下のようなデータベースがあるとします。水深1mごとのある値を A01~H01までID番号を付けてデータベース化しています。(水深10mまで) A    B   C  D E F  G  H  I   水深 ID 1    A01 B01 C01 D01 E01 F01 G01 H01 2  1    20 20 20 20 10 20 10 10 3  2 20 20 20 20 10 10 20 10 4  3 20 10 30 10 10 20 30 10 5  4 20 15 10 20 15 30 10 10 6  5 10 20 5 10 20 10 20 20 7  6 15 20 10 10 20 10 10 30 8  7 20 9  8 10 10 9 15 11 10 20 上記のデータベースから以下の選択したIDだけの深度を抽出したいと考えていますがなかなかうまくいきません。     ID 水深m) A01 B01  D01 E01  H01 1    20 20 20 10 10 2 20 20 20 10 10 3 20 10 10 10 10 4 20 15 20 15 10 5 10 20 10 20 20 6 15 20 10 20 30 7 20 8 10 9 15 10 20