質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1232閲覧

単一のセルから一部の情報取得

coko1

総合スコア276

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/11/09 08:39

編集2016/11/10 00:47

お世話になります。

excelのシートのセルに以下のような情報が記述されています。
”■(設定A) □(設定B)”

※■がこの場合の設定の対象、□は対象ではない。(チェックボックスの代わりに使用)
このような情報が1つのセルにあった場合に、■がある方の()の中の設定のみを読み取って以降の処理で活用していきたいのですが、どのようにして判別したらよいのでしょうか?お力を貸していただけると大変助かります。

多くの回答ありがとうございます。いろいろと試行錯誤しながら考えていますのでベストアンサーは今しばらくお待ちいただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

正規表現でマッチングさせてはどうでしょうか

vbscript

1 2Dim regEx, matches As Object 3Set regEx = CreateObject("VBScript.RegExp") 4 5regEx.Pattern = "■\(([^\)]*)\)" 6 7Set matches = regEx.Execute("■(設定A) □(設定B)") 8Debug.Print matches(0).submatches(0) ' ⇒ 設定A 9Set matches = regEx.Execute("□(設定A) ■(設定B)") 10Debug.Print matches(0).submatches(0) ' ⇒ 設定B

投稿2016/11/09 09:46

編集2016/11/09 09:48
attercop

総合スコア246

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

入力された文字列のレイアウトが多少崩れていても取得できるよう、取得したい条件をそのままロジックにしてみました。

最初に見つけた■から次の□の前までを選択項目として取得する方法となっています。

Sub test() Dim strInput As String Dim strVal As String Dim iPos As Integer strInput = Sheets("Sheet14").Cells(2, 2) iPos = InStr(strInput, "■") If iPos = 0 Then '■は見つからなかった Exit Sub Else 'とりあえず見つけた位置以降の文字列を取得 strVal = Mid(strInput, iPos + 1) '次の□を検索 iPos = InStr(strVal, "□") If iPos > 0 Then '見つかった場合は□以降を除去 strVal = Mid(strVal, 1, iPos - 1) End If '念のため■も残っていないか検索 iPos = InStr(strVal, "■") If iPos > 0 Then '見つかった場合は■以降を除去 strVal = Mid(strVal, 1, iPos - 1) End If End If '括弧外に余分なスペースがあれば除去 strVal = Trim(strVal) '前後の括弧を除去 strVal = Mid(strVal, 2, Len(strVal) - 2) MsgBox strVal End Sub

参考になれば幸いです。

投稿2016/11/09 12:48

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

”■(設定A) □(設定B)” のフォーマットを崩さない前提で、セルA1に入っているとして。

Sub test() Arr = Split(Range("A1").Value, " ") If Left(Arr(0), 1) = "■" Then Shori = Mid(Arr(0), 2) Shori = Replace(Shori, "(", "") Shori = Replace(Shori, ")", "") ElseIf Left(Arr(1), 1) = "■" Then Shori = Mid(Arr(1), 2) Shori = Replace(Shori, "(", "") Shori = Replace(Shori, ")", "") End If Msgbox Shori End Sub

やっつけで済みません。
同じ処理をしている部分は関数化するとか工夫の余地はありますね。

投稿2016/11/09 08:50

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ynakano

2016/11/09 08:51

両方に"■"はない前提ですね。 両方にあったら「設定A」が引っかかります。
coko1

2016/11/09 09:08 編集

両方にはないのは前提になります。しかし、基本的なフォーマットは変わらないとしても” ”があるのが前提かといわれると難しいところです。 ほぼ間違いなくあるであろう、といった感じなので...
ynakano

2016/11/09 09:10

区切り文字は何でも良いですが、フォーマットは決めておかないと処理ができない、もしくは著しく煩雑になりますね。 それか閉じ括弧を区切り文字にしてtrimで余分なスペースを落とすかですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問