Excelでマクロを使って値の抽出をする方法
- Excelでマクロを使って値の抽出をしたい場合、B列の数字部分を抜き出して表示する方法について教えてください。
- 具体的な手順として、B列の数字部分をC列、D列、E列にそれぞれ表示させる方法をお伺いしたいです。
- どうかご回答をお願いします。
- ベストアンサー
値の抽出
Excelでマクロを使って値の抽出をしたいのですが、自分ではうまくいきません。どうかお力をお貸し下さい。 A1セル:品番 A2セル:DDH0020 A3セル:DDH0030 A4セル:DDH0040 A5セル:DDH0050 … A30セル:DDH0150 B1セル:品名 B2セル:ゴウハン 13*20.0X 56X807 U B3セル:ゴウハン 13 20.0X 56X845 U B4セル:ゴウハン 13 20.0X 85X1257 U B5セル:ゴウハン 13 20.0X 56X1280 U … B30セル:ゴウハン 13*20.0X 232X1897 U このような形で30行目まであります。 この内のB列の数字部分(2行目であれば)、20と56と807を抜き出し C2セル:20,D2セル:56,E2セル:807 (3行目であれば) C3セル:20,D3セル:56,E3セル:845 (4行目であれば) C4セル:20,D4セル:85,E4セル:1257 と表示させたいのです。 ご面倒おかけしますが、どうかご回答をお願いします。
- 08517502
- お礼率53% (7/13)
- その他([技術者向] コンピューター)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 マクロの一例を考えてみました。 的外れだった場合はすみません。 ■前提条件 1)取り出す対象の「数字文字列」は、全て、半角の「数字文字」("0"~"9")と、 半角の"."(ピリオド=小数点)からなる文字列のみとする。 2)数字が連続した部分文字列(小数点も含む)を、1つの「数字文字列」とする。 ご提示の例にある以下の文字列、 ゴウハン 13*20.0X 56X807 U の場合、「数字文字列」は、 1番目 = 13 2番目 = 20.0 3番目 = 56 4番目 = 807 となります。 ■マクロの概要&使用方法 1)マクロは、引数と戻り値がある、以下のような「ユーザー関数」とし、 セルの数式として利用できるものとします。 <ユーザー関数の仕様> 【関数名】 : GetNumber 【機 能】 : セル上の文字列より指定番目の数値を取得 【引 数】 ByrRef rgCell As Range : セルのRangeオブジェクト ByVal nNumPos As Integer : 文字列内の数値の位置 【戻り値】 Variant : 指定位置の数値 2)セルの設定 B列 : 数値を取り出す対象の文字列 C列 : B列の文字列内の、2番目の数値 ・「数式」を設定(今回のユーザー関数を使用します) ・表示形式 : 数値(小数点以下の桁数 = 1) D列 : B列の文字列内の、3番目の数値 ・「数式」を設定(今回のユーザー関数を使用します) ・表示形式 : 標準 E列 : B列の文字列内の、4番目の数値 ・「数式」を設定(今回のユーザー関数を使用します) ・表示形式 : 標準 <数式の例> C2 =GetNumber($B2,2) D2 =GetNumber($B2,3) E2 =GetNumber($B2,4) ※C列~E列の3行目以降のセル範囲には、C2~E2のセル範囲をコピーし、 その「数式」をコピーします。 ■マクロ(ユーザー関数) ※下記のマクロは、「標準モジュール」に実装して下さい。 注)インデント等のため全角スペースを入れています。 ========================= Option Explicit ' '===================================================== ' GetNumber:セル上の文字列より指定番目の数値を取得 '【引数】 ' ByrRef rgCell As Range :セルのRangeオブジェクト ' ByVal nNumPos As Integer :文字列内の数値の位置 '【戻り値】 ' Variant :指定位置の数値 '===================================================== Function GetNumber(ByRef rgCell As Range, _ ByVal nNumPos As Integer) As Variant 'セルが複数だった場合は戻る If rgCell.Count <> 1 Then GetNumber = "" Exit Function End If Dim i As Integer 'ループ変数 Dim nStrLen As Integer 'セル上の文字列の文字数 Dim nNumCnt As Integer '数字文字列の位置(順番) Dim s1 As String '文字列ワーク(1) Dim s2 As String '文字列ワーク(2) Dim s3 As String '文字列ワーク(3) s1 = rgCell.Text 'セル上の文字列取得 s2 = "" '文字列ワーク(1文字取得用)をクリア s3 = "" '文字列ワーク(数字文字列用)をクリア nStrLen = Len(s1) '文字列の文字数取得 nNumCnt = 0 '数字文字列の位置を初期化 '文字列から数字文字列を取り出す(文字数分ループ) For i = 1 To nStrLen s2 = Mid(s1, i, 1) '1文字ずつ取り出し If s2 Like "[0123456789.]" Then '数字or小数点? If Len(s3) < 1 Then nNumCnt = nNumCnt + 1 '数字文字列の位置を+1 End If s3 = s3 & s2 '数字文字列に数字文字を追加 ElseIf Len(s3) > 0 Then '数字文字列あり? If nNumCnt = nNumPos Then Exit For '指定位置の数字文字列ならループを抜ける End If s3 = "" '数字文字列をクリア End If Next i '指定位置の数字文字列があれば戻り値として返す If nNumCnt = nNumPos And IsNumeric(s3) = True Then GetNumber = Val(s3) Else GetNumber = "" End If End Function ========================= 添付画像は、上記マクロ実装後のExcelシート画面の例です。 以上です。参考になれば幸いです。
関連するQ&A
- データ抽出について教えて下さい。
以前質問し、マクロを作って頂いたのですが、行と列を挿入しなくてはならなくなり、マクロが機能しなくなってしまいました。 ●以前の質問● セルA1:カベシタジゴウハン 9X 50X1800 D9 セルA2:ウケゴウハン T5.5 40X 300 U7 セルA3:ゴウハンK 2.5X 60X 80 スペーサー セルA4:ランバP *412X3547 W2 セルA5:VSF K 12.5X 47X 869 LE セルA6:VSF J*12X 68X2395 Wメン WX とシートに入っているとします。これを、 セルB1:9 セルC1:50 セルD1:1800 セルB2:5.5 セルC2:40 セルD2:300 セルB3:2.5 セルC3:60 セルD3:80 セルB4:空白 セルC4:412 セルD4:3547 セルB5:12.5 セルC5:47 セルD5:869 セルB6:12 セルC6:68 セルD6:2395 と入るように関数を使うにはどうしたら良いでしょうか。 マクロでも構いません。 ●採用させて頂いた回答● Sub test() Dim i, ii, iii Dim a As String For i = 1 To Range("a65536").End(xlUp).Row a = "" iii = 0 For ii = 1 To Len(Cells(i, 1).Value) If IsNumeric(Mid(Cells(i, 1).Value, ii, 1)) Or Mid(Cells(i, 1).Value, ii, 1) = "." Then a = a & Mid(Cells(i, 1).Value, ii, 1) ElseIf a <> "" Then Cells(i, 2).Offset(, iii).Value = a a = "" iii = iii + 1 End If If iii = 3 Then Exit For Next ii Next i End Sub ●今回セルが変わりました● セルB2:カベシタジゴウハン 9X 50X1800 D9 セルB3:ウケゴウハン T5.5 40X 300 U7 セルB4:ゴウハンK 2.5X 60X 80 スペーサー セルB5:VSF K 12.5X 47X 869 LE セルB6:VSF J*12X 68X2395 Wメン WX とシートに入っています。これを、 セルC2:9 セルD2:50 セルE2:1800 セルC3:5.5 セルD3:40 セルE3:300 セルC4:2.5 セルD4:60 セルE4:80 セルC5:12.5 セルD5:47 セルE5:869 セルC6:12 セルD6:68 セルE6:2395 このように入るようにしたいのです。 以前採用させて頂いたマクロを修正したいのですが、どうも自分では失敗してしまいます。 お力をお貸し頂ければ幸いです。
- ベストアンサー
- その他(業務ソフトウェア)
- Excelで、データの抽出について質問します。
Excelの同一セル内の数字のみの抽出について教えて 下さい。 セルA1:カベシタジゴウハン 9X 50X1800 D9 セルA2:ウケゴウハン T5.5 40X 300 U7 セルA3:ゴウハンK 2.5X 60X 80 スペーサー セルA4:ランバP *412X3547 W2 セルA5:VSF K 12.5X 47X 869 LE セルA6:VSF J*12X 68X2395 Wメン WX とシートに入っているとします。これを、 セルB1:9 セルC1:50 セルD1:1800 セルB2:5.5 セルC2:40 セルD2:300 セルB3:2.5 セルC3:60 セルD3:80 セルB4:空白 セルC4:412 セルD4:3547 セルB5:12.5 セルC5:47 セルD5:869 セルB6:12 セルC6:68 セルD6:2395 と入るように関数を使うにはどうしたら良いでしょうか。 マクロを使うことになっても構いませんので、教えて下さい。
- ベストアンサー
- その他(業務ソフトウェア)
- EXCELで指定した行内にある値以外を抽出する
こんにちは。 業務で困っていることがあるので、知恵をお貸し下さい。 EXCELで指定した行内にある値以外を抽出したいのです。 A1:対象品番 B1:対象外 C1:数量 D1:納入日 E1:品番 F1:数量 A2:HHH6030 B2: C2: D2:09/9/29 E2:HIH6260 F2:1 A3:HHH6060 B3: C3: D3:09/9/29 E3:IIHK110 F3:84 A4:HHH7000 B4: C4: D4:09/10/1 E4:HHH6030 F4:24 A5:HHH7130 B5: C5: D5:09/10/1 E5:IHH7000 F5:8 A6:HHH7140 B6: C6: D6:09/10/1 E6:HHH7130 F6:2 とあります。 ●E列の中から、A列にある値以外のものを抜き出し、B列に値を返す。 ●の作業をしたいので、VBAを使ってもかまいませんので、何か良い方法があれば教えてください。 よろしくお願いします。
- ベストアンサー
- その他(業務ソフトウェア)
- 4元連立方程式について
Excelで方程式を解いたのですがひとつだけ答えが合わないのです。どなたかこの式の違うところを教えてください。 5x-2y+4z+3m=75 x+3y-5z-m=-36 4x-3y+z+4m=51 3x+5y-3z-2m=-12 Excel上での計算式↓ =(A1*E2*C3*D4-A1*E2*C4*D3-A1*E3*C2*D4+A1*E3*C4*D2+A1*E4*C2*D3-A1*E4*C3*D2-A2*E1*C3*D4+A2*E1*C4*D3+A2*E3*C1*D4-A2*E3*C4*D1-A2*E4*C1*D3+A2*E4*C3*D1+A3*E1*C2*D4-A3*E1*C4*D2-A3*E2*C1*D4+A3*E2*C4*D1+A3*E4*C1*D2-A3*E4*C2*D1-A4*E1*C2*D3+A4*E1*C3*2+A4*E2*C1*D3-A4*E2*C3*D1-A4*E3*C1*D2+A4*E3*C2*D1)/(A1*B2*C3*D4-A1*B2*C4*D3-A1*B3*C2*D4+A1*B3*C4*D2+A1*B4*C2*D3-A1*B4*C3*D2-A2*B1*C3*D4+A2*B1*C4*D3+A2*B3*C1*D4-A2*B3*C4*D1-A2*B4*C1*D3+A2*B4*C3*D1+A3*B1*C2*D4-A3*B1*C4*D2-A3*B2*C1*D4+A3*B2*C4*D1+A3*B4*C1*D2-A3*B4*C2*D1-A4*B1*C2*D3+A4*B1*C3*D2+A4*B2*C1*D3-A4*B2*C3*D1-A4*B3*C1*D2+A4*B3*C2*D1)
- ベストアンサー
- 数学・算数
- エクセル、任意の「行」だけを抽出したい。
こんなことできますか? 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の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 ※ 説明がわかりにくいかもしれませんが、よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- ワードの表の高さ変更
たとえばワードで5×5の表を作成したあと、セルを結合したり分割したりして表を完成させている最中なのですが、高さ変更がうまくいかないセルにぶち当たりました。 指定するセルの高さ(表作成後のA1~A2間)だけ変更したいのですが、ドラッグしても隣の区切り(A2-E4)まで一緒にドラッグされて高さが変わってしまいます。 隣の高さを変えずに希望するセルだけ変更する方法を教えてください。 表デフォルト A1 B1 C1 D1 E1 A2 B2 C2 D2 E2 A3 B3 C3 D3 E3 A4 B4 C4 D4 E4 A5 B5 C5 D5 E5 ↓ 表作成後 A1 B1 C1 D1 E1 B2 C2 D2 E2 B3 C3 D3 E3 A2 B4 C4 D4 E4 B5 C5 D5 E5 ↓ A1~A2を引っ張るとこうなってしまう A1 B1 C1 D1 E1 B2 C2 D2 E2 B3 C3 D3 E3 A2 B4 C4 D4 E4 B5 C5 D5 E5 どうにかして他の列には影響を与えずAのセルだけ高さを自由に変えたい ↓ A1 B1 C1 D1 E1 B2 C2 D2 E2 A2 B3 C3 D3 E3 B4 C4 D4 E4 B5 C5 D5 E5 追記:A1,A2間の区切りをドラッグすると表全体を下に伸ばすことは可能ですが上に伸ばそうとするとB4に入力されている文字にぶつかってこれ以上縮めることはできません 説明がヘタクソで申し訳ないんですがよろしくお願いします
- ベストアンサー
- Word(ワード)
- エクセルで斜めに参照コピー
1| A1 | B1 | C1 | D1 | E1・・・ 2| A2 | B2 | C2 | D2 | E2・・・ 3| A3 | B3 | C3 | D3 | E3・・・ 4| A4 | B4 | C4 | D4 | E4・・・ ・・・ と普通に並んでいるデータを 1| A1 | B2 | C3 | D4 | E5 |・・・ 2| = | A2 | B3 | C4 | D5 | E6 |・・・ 3| = | = | A3 | B4 | C5 | D6 | E7 |・・・ ・・・ (=は空白セル) とななめに参照コピーさせたいのですが、普通にドラッグコピーさせたのではうまくいきません。データ数が結構多いもので一つ一つコピーするのも大変です。何か簡便な方法はあるでしょうか?列毎もしくは行毎の作業でもいいので、何か良い方法がありましたらご教示いただけませんでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルの値の選択について
以前までできたのですが、数日前からできなくなってしまい不便です。原因も分からなく困ってます。設定等やり方を教えてください。 エクセルで、下記の例のとおり、A1のセルからE5のセルまで全てに値が入っております。A1からA5を全て選択したい時に今までは、A1にカーソルを置いた状態で「shift+ctrl+↓」を押すと一気にA1からA5までが選択できました。(ドラッグした状態) 数日前からその操作ができなくなってしまいました。 併せて、A5にカーソルを置き、E5にカーソルを飛ばしたい時は「ctrl+→」でカーソル移動ができました。この操作も今はできなくなってしまいました。 設定をどのようにすれば良いのか教えてください。よろしくお願いします。 <例> A1 B1 C1 D1 E1 A2 B2 C2 D2 E2 A3 B3 C3 D3 E3 A4 B4 C4 D4 E4 A5 B5 C5 D5 E5
- 締切済み
- その他MS Office製品
- エクセルで行を越えての貼り付け
X1~X100に数値が入っていて これを5列で1行おきとか2行おきとかに 並べ替えたいのですがアドバイスお願いいたします データーが100くらいなら良いのですが もっと多いので簡単な方法をアドバイスください X1~X100に数値 A1~E1に X1~X5 A1=X1 B1=X2 C1=X3 D1=X4 E1=X5 A5~G5に X6~X10 A5=X6 B5=X7 C5=X8 D5=X9 E5=X10 と言う風にしたい A1:E1をコピーして間に3行挟んでA5:E5に貼り付け するとデーターが A5~G5に X5~X9とずれてしまいます 4行挟んでコピーすれば正しく貼り付けますが 1行挟んでも2行挟んでも3行挟んでも 何行挟んでも良いようにするには どうすれば良いでしょうか よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- 数式が入った空白のセルを合計するとき
数式が入った空白のセルを合計するとき WINDOWS XP EXCELL 2003 です。 各セルの数式は C43 =SUM(B36-C36) D36 =SUMPRODUCT((入力!$C$2:$C$50=$A36)*(入力!$A$2:$A$50=D$1),入力!$E$2:$E$50) E36 =SUMPRODUCT((入力!$D$2:$D$50=$A36)*(入力!$A$2:$A$50=D$1),入力!$F$2:$F$50) E43 =SUM(C43+D36-E36) と数式がそれぞれに入っています。 ご教示を仰ぎたいのは D36,E36 に値がない空白のセルですがこの場合、E43 G43 I43 と表示(この場合 50,000)がされますがD36 若しくはE36に値が表示されたときのみにE43 を表示したいのですが可能でしょうか。 目的は見やすくしたいのですが。 ご指導いたたければ幸甚の至りです。
- ベストアンサー
- その他MS Office製品
お礼
わぁ!出来ました。 ご丁寧な説明に画像まで付けて頂き、とても分かりやすかったです。 ありがとうございました。