- 締切済み
Excelの計算式で、特定の文字列の一つ下のセルを取り出せますか?
うちは単純にExcel(VER.97)で顧客データを管理しているのですが、お客さまからのメールをばらばらにペーストして、振込用紙に住所とかを印刷したり、以前の注文商品がなんだったかを見るようにしています。 たとえば、ショッピングカートでメールを受注すると、 『購入商品情報』 ---------------------------------------------------------------------- (商品1) 品番:SND-R-R6 品名:サンドストーン 単価:30円 という感じにメールが送られてきます。 これを、まるごとメールの文章をExcelにペーストすると、行数が多い文だけペーストに時間がかかります。 でも、まるごとペーストすると、すべての内容がA列に入るので、何か計算式を使えば、一発で任意の場所にそのデータの値を持っていけるのではと思うのです。 たとえば、 「[商品1] という文字列と同じ列の、 [商品1] の次の行のセルの値を返す 」 「[商品1] という文字列と同じ列の、 [商品1] の次の次の行のセルの値を返す 」 という計算式。これが使いたくてしょうがないのですが、計算式の辞書を片手に苦心しましたが分からない・・・ もしご存知なら助けてください~よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
#1で回答を入れたものです。実のところ質問の内容を捉えていませんでした。VBAでないと出来ないのではとのご回答もあり、再度下記を載せてみます。質問の内容を明確にするためにもしたいことは下記(1)と(3)のようなものでしょうか。 (1)まずエクセルのSheet1にテストデータを作ります。セルA1からA16までです。 (商品1) 品番:SND-R-R6 品名:サンドストーン 単価:30円 品番:SND-R-R7 品名:ノート 単価:51円 品番:SND-R-R12 品名:消しゴム 単価:100円 品番:SQT-R-R99 品名:筆箱 単価:200円 品番:AAB-Y-R10 品名:マーカー 単価:130円 Sheet1にボタンを1つ貼りつけておきます。 Sheet1に貼りつけが終わるとボタンをクリックします。 (2)VBEのModule1に Sub test01() d1 = Sheets("sheet1").Range ("a2").CurrentRegion.Rows.Count ' この行は上の行の右端に続けてください d2 = Sheets("sheet2").Range("a2").CurrentRegion.Rows.Count ' この行は上の行の右端に続けてください k = d2 + 1 For i = 1 To d1 a = Worksheets("sheet1").Cells(i, 1) If Left(a, 3) = "品番:" Then Sheets("sheet2").Cells(k, 1) = Mid(a, 4, 10) a = Worksheets("sheet1").Cells(i + 1, 1) Sheets("sheet2").Cells(k, 2) = Mid(a, 4, 10) a = Worksheets("sheet1").Cells(i + 2, 1) Sheets("sheet2").Cells(k, 3) = Mid(a, 4, 10) k = k + 1 End If Next i End Sub を作ります。 またSheet1のイベントプロシージャーとして Private Sub CommandButton1_Click() test01 End Subを作る。 (3)前記ボタンをクリックすると、Sheet2のA2からC6に SND-R-R6 サンドストーン 30円 SND-R-R7 ノート 51円 SND-R-R12 消しゴム 100円 SQT-R-R99 筆箱 200円 AAB-Y-R10 マーカー 130円 が出来ます。 (4)仮定があります。貼りつける前に毎回Sheet1はクリアーしてください。VBAでクリアーも可能。品番、品名、単価はこの順序でならんでA2セル以下に続いてSheet1に入ってくるものと仮定しています。品番は10桁以下と仮定しています。品番:、品名:、単価:はこのままの言葉で入ってくるものとします。これらの仮定は外してもプログラムを複雑にすれば対処可能と思う。
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 最終的にどんな形に持っていきたいのでしょうか? データベース形式のシートにデータを写したいって事でしょうか? ↓こんな感じで。 A B C D 1 [顧客] [品番] [品名] [単価] 2 田中 SDR サンド 30 3 加藤 DDS ランド 50 4 ・ 関数だけでは難しい気がします。 マクロを使う必要がありそうな。。
- imogasi
- ベストアンサー率27% (4737/17069)
問題の意味が捉えにくいのですが、的外れなら済みません。 (1)=OFFSET()という関数があります。これは使えませんか。A1からB3に下記のデータをいれて 1 2 2 3 3 4 例えばC3に=OFFSET(A1,1,1)-->3,=OFFSET(A1,2,1) -->4です。()内に入れる項目はそのセルを基準にして、真中は、それ初項のセル自身を1として、下へ何行、右はそれ自身の列を1として、右へ何列を入れます。マイナスも指定可能でそれぞれ、上行へ、左列への意味になります。 (2)もう一つ。送る方のセルから発想して難しくなって いませんか。受ける方のセルに関数式をいれるのですよ。また=A1なども関数式と同類に考えないと。 言いたい事はA1のセルの値をD1にもって来たいなら、 「D1セルに」=A1と入れれば良いことです。A1->D1をするのにA1セルにどうしようと思っていませんか。(思い過ごしかな?判ってるワイと怒らないで下さい。)
お礼
お忙しいところ質問の回答ありがとうございます。 こんなかんじでわかりますか? 本で調べたけど、どうしてもわからなくて、教えて!gooのことを会社の子に教えてもらい、初めて質問しました。今日改めてみてみると、追加の質問もたくさんあるし、すごく親身になって回答を探してもらって、来てよかった♪もうすこしはじめから具体的に質問していたらよかったなと思います。 やっぱり計算式だけでは無理でしょうか?今日、はじめて「マクロの記録」っていうのをやってみると、行を追加したり、計算式を入れたり、書式をコピーしたりが一度でできてびっくりしました。 こわかったので、使った後は作ったマクロを消しちゃいましたけど。(間違って他のファイルに使いそうなので) でも、抽出はわかりませんでした。1歩ずつすすんでみます。 どうもありがとうございました♪もしお時間があるようならまた教えてください。
補足
offset関数も考えたのですが、探した関数の本には、「セルの基準値がセル番号(「A1」とか)」のものしか載っていなかったので、それを文字列に対応できるように応用できなかったのです・・・。 こちらではもうすこし具体的でしょうか? (Sheet1のなかみ)←メールをそのままペースト A 1 [商品1] 2 品番:SND-R-R6 3 品名:サンドストーン 4 単価:30円 5 ----------- 6 [商品2] 7 品番:SND-R-R8 8 品名:サンドストーン 9 単価:50円 (Sheet2のなかみ)←こちらに計算式をいれて、あとで振込用紙などフォームに加工する予定 A B C D 1 購入商品情報 品番 品名 単価 2 [商品1] 品番:SND-R-R6 品名:サンドストーン 単価:50円 3 [商品2] 品番:SND-R-R8 品名:サンドストーン 単価:50円 もしできれば、「品番:」「品名:」「単価:」は抜きたいのですが、無理ならこのままでも大丈夫。 VBEとかマクロもやってみようと思ったのですが、やったことがなくて、ボタンを作る事が出来なくて挫折・・・
お礼
こんにちは、るるるーです。 丁寧にご回答頂いて、びっくりしました。お忙しい中本当にありがとうございました。 でもでも、 (1)まずエクセルのSheet1にテストデータを作ります。セルA1からA16までです。 はできましたが、 Sheet1にボタンを1つ貼りつけておきます。 Sheet1に貼りつけが終わるとボタンをクリックします。 ここからが分かりません。オートシェイプで形を作るのがぜいぜい・・・ VBEとマクロがなんであるか、Module、イベントプロシジャーなどの意味がわからないのです。 imogasiさんと私の知識に雲泥の差あり・・・ いろいろ出来て大変便利そうなのですが、難しいですね。計算式でできないか模索中です・・・ 大変詳しく時間をかけて説明して説明してくださっているだけに、申し訳ない気持ちでいっぱいです。 もうちょっとがんばってみますね。 すみません&ありがとうございました。