プロが教える店舗&オフィスのセキュリティ対策術

初めての書き込みます。
エクセル初心者でいろいろ調べましたが、応用力がなく行き詰まってしまいました。
詳しい方お力貸してください。


A1のセルに以下のように、ずらーっと入っているとします。

こんにちは 品番:AAAAAA おはよう 原産国:インドネシア さようなら 品番:BBBBBB おはよう 原産国:カンボジア・・・・・・・・・・・・・・・・・


例えば、ここから、品番から始まる10桁と原産国から始まる10桁を抜き出したい場合

=LEFT(RIGHT($A$1,(LEN($A$1)+1)-FIND("品 番:",$A$1)),10)

↑これで、抜き出しはできたのですが、繰り返し次の品番、原産国も抜き出していきたい場合はどのようにしたらよいのでしょうか??

どうぞお力貸してください。
宜しくお願いします。

質問者からの補足コメント

  • 不備があり申し訳ありません。
    品番は空白なしです。何かの拍子に空白を入れてしまったようです。
    私がやってみた関数はいろいろなところから拾ってきて繋げたのでおかしいかもしれません。
    ちなみにバージョンは2007です。
    明日回答頂いたものでやってみたいと思います。またご報告します。

      補足日時:2017/02/23 16:58
  • いろいろやってみましたが、私の例題が悪かったようで、うまくできませんでした。
    言葉は大分変えたのでぐちゃぐちゃの文章ですが、こういったA1にずらーっと入ってる文章から品番と原産国を抜き出したいです。

    ゴムを全面に採用したワニモデルに新色登場。品番:X6X93A価 格:¥92,8AA+税ピコ:SS~M素材名:MOMIJI/本体=かいこ製 支え=毛皮製素敵な機能/ゴム底インナー機能/春ですね式(SAKURA)生産国:カナダ花粉症が始まる:CHI6A9・HIK799インディゴブルーxインディゴブルー品 名:キリンXNewColorNewColorアリゲーターエックス49499A9Aブラックxブラックお菓子カレンダーEXSYゴムを全面に採用したワニレディスモデルに新色登場。品番:X6X33A価 格:¥92,8AA+税ピコ:22.5~26.A素材名:MOMIJI/本体=かいこ製 生産国:中国‥‥‥

      補足日時:2017/02/24 11:00
  • へこむわー

    品番と生産国が抜き出したいです。原産国と記入してしまいました。失礼致しました。MIDとFINDで最初の品番と生産国を抜き出すところまではできましたが、次の品番と生産国を抜き出す事ができず悩んでいます。VBAもできたらおもしろいですが、拾ってきたものを張り付けるレベルです‥

      補足日時:2017/02/24 11:09

A 回答 (7件)

#6の回答者です。


補足をみました。

内容が変わっています。
原産国 ->生産国に変わっているので、それではエラーが発生してしまいます。

質問内容の、そのデータは、IE Document の innerText とかではないでしょうか。innerHTML のデータとか提示できませんか?もう少し、まともな切り分けが可能です。

それに、Table で取り出せば、そのまま表になって並ぶはずです。
今回のコードを、文字の規則に従って、さらに直すことは可能ですが、今の段階では、この程度でもよいのかと思います。

''------
Sub SplitWordsR()
 Dim str_text As String
 Dim i As Long
 Dim buf1, buf2, buft
 str_text = Range("A1").Value
 buf1 = Split(str_text, "品番")
 buf2 = Split(str_text, "生産国")
 If UBound(buf1) <> UBound(buf2) Then
  MsgBox "品番と生産国の数の対応がありません", vbExclamation
  If MsgBox("それでも続行しますか?", vbOKCancel) = vbCancel Then Exit Sub
 End If
 Range("A3:B3").Value = Array("品番", "生産国")
 For i = 0 To UBound(buf1)
 On Error Resume Next
  If Left(buf1(i), 1) Like ":" Then
   buft = buf1(i)
   Cells(3 + i, 1).Value = Mid(buft, 2, 7)
   ''Debug.Print buft
   Cells(3 + i, 2).Value = Mid(Split(buft, "生産国")(1), 2, 7)
   buft = ""
  End If
On Error GoTo 0
 Next
End Sub
    • good
    • 1
この回答へのお礼

助かりました

すごいです!!やっぱりVBAってすごいですね。頑張って関数も勉強してこういうのが少しでもわかるようになりたいです。やりたいことができました。有難うございます

お礼日時:2017/02/24 12:03

「品 番 」はカウントには入れていません。

「品番」でないとけません。以下は、徹底的に切り分けてしまいました。

'//'標準モジュール
Sub SplitWords()
 Dim str_text As String
 Dim i As Long
 Dim buf1
 str_text = Range("A1").Value
 buf1 = Split(str_text, "品番")
 Range("A3:B3").Value = Array("品番", "原産国")
 For i = 0 To UBound(buf1)
  If Left(buf1(i), 1) Like "[::]" Then
   Cells(3 + i, 1).Value = Mid(buf1(i), 2, 7)
   Cells(3 + i, 2).Value = Mid(Split(buf1(i), "原産国")(1), 2, 7)
  End If
 Next
End Sub

'//
    • good
    • 0

結局 どうなるのが正解なのかよく分かりませんが 2007では FILTERXML関数が


使えないので

品番:
=LEFT(TRIM(MID(SUBSTITUTE($A$1,"品番:",REPT(" ",999)&"品番:"),ROW(A1)*999+1,999)),10)

原産国:
=LEFT(TRIM(MID(SUBSTITUTE($A$1,"原産国:",REPT(" ",999)&"原産国:"),ROW(A1)*999+1,999)),10)

下方向にコピー。
    • good
    • 0
この回答へのお礼

もっと関数勉強します。いろいろ勉強になりました。有難うございます

お礼日時:2017/02/24 12:04

Sub Sample()



Dim tmp() As String
tmp = Split(Range("a1"), " ")


i = 2
For Each abc In tmp

If InStr(abc, "品番") > 0 Then

Cells(i, 1) = Left(abc, 10)

i = i + 1

End If

If InStr(abc, "原産国") > 0 Then

Cells(i, 1) = abc

i = i + 1

End If

Next abc

End Sub
「特定の文字から始まる文字を抜き出したい!」の回答画像4
    • good
    • 0
この回答へのお礼

私の例題が悪くてできませんでしたが、勉強になりました。こんなのできるなんて本当に尊敬します。こんな初心者に丁寧にありがとうございました。

お礼日時:2017/02/24 12:05

回答がつかないようですので。

マクロを使っていいのならできますよ。

まず、文字列をすべて1文字ずつ分けて配列に入れます。例えば最大文字数が200文字とすると、

下の文字列がA1に入っているとします。

品 番:AAAAAA おはよう 原産国:インドネシア さようなら 品 番:BBBBBB おはよう 原産国:カンボジア・・・・・・・・・・・・・・・・・

結果はA10以下に書き出します。

sub test()

dim word(200) as string

myword = Cells(1, 1)

For i = 1 To 200
  word(i) = Mid(myword, i, 1)
Next

k = 10
For j = 1 To 197
  If word(j) & word(j + 1) & word(j + 2) & word(j + 3) = "品 番:" Then
    Cells(k, 1) = Mid(myword, j, 10)
    k = k + 1
  End If
Next

end sub

原産国も同じような方法でできるはずです。

きっともっとスマートな方法があると思いますが、それは別の方にお願いします。(*^_^*)
    • good
    • 0
この回答へのお礼

初心者に丁寧にありがとうございました。やっぱりVBAできる人に心底憧れます。ありがとうございました。もっと勉強します。

お礼日時:2017/02/24 12:06

数式と例が合わないので意味が分かりにくいです。


「品番」なのか「品 番」なのかどっちですか?
「品番から始まる10桁」というのは 例でいうとどこのことですか?

> =LEFT(RIGHT($A$1,(LEN($A$1)+1)-FIND("品 番:",$A$1)),10)
これは

=MID($A$1,FIND("品 番:",$A$1),10)
とどう違うのでしょう。何か意味があってなさっているのでしょうか。

あと Excelのバージョンはいくつですか?
    • good
    • 0

FIND関数は始まりの位置を指定できます。


1つ前のFINDで見つけた位置を別のセルに保存するか、式で再度抽出し、それ+1から検索するようにFINDを加工しましょう。
3つめを検索する場合2つめの位置が必要となるので、1つ1つの開始位置を横の列などに表示させるほうが楽ですよ。
    • good
    • 0
この回答へのお礼

わかりやすくありがとうございます。まずはきちんと勉強します。FIND私の業務にはめちゃくちゃ使えます!!

お礼日時:2017/02/24 12:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!