Excelで抽出、書き出しを繰り返すマクロ
- ExcelのD列に記載された表を横一列に書き出すマクロの作成方法
- 書式が異なるセルを複数回繰り返し書き出す場合の対応方法
- 要求された条件に基づいてExcelマクロを作成する手順
- ベストアンサー
Excelで抽出、書き出しを繰り返すマクロ
ExcelのD列に下記のように記載されたExcelの表があります D1 20(150) D2 300(100) D3 40(60) D4 月 10 / 火 15 / 水 200 / 木 50 / 金 52 / 土 20 / 日 100 / D5 空欄 D6 全角文字 D7 半角数字 D8 10(50) D9 200(200) D10 30(90) D11 月 30 / 火 18 / 水 100 / 木 150 / 金 352 / 土 120 / 日 150 / D12 全角文字 ・ ・ ・ これを、下記のように横一列に書き出したいです E1=20,F1=300,G1=40 (D1~D3の()の左側の数値) H1=150,I1=100,J1=60 (D1~D3の()の中の数値) K1=10,L1=15,M1=200,N1=50,O1=52,P1=20,Q1=100 (D4の曜日と/の間の数値) D1~D3(D8~D10)は全て半角です D4(D11)は曜日以外のスペースや数字、/は全て半角です D5~D7のようなセルが何個か間に入りますが(上の例では3個ですが、4個だったり5個だったりランダムです) D1~D4と同じ書式のセルが何度もでてきます。 その都度、横の欄に書き出せればと思っています。 (D8~D11のように同じ書式が出てきた場合はE8~Q8に書き出す形) 上手く説明できなくて申し訳ないのですが この作業を繰り返してくれるマクロを作成していただく事は可能でしょうか? 色々と指定が多いので、不可能でしょうか… もし可能なようでしたら、大変ご面倒おかけしますが 作成していただけますと助かります。よろしくお願いします。
- tricktrick
- お礼率23% (9/38)
- オフィス系ソフト
- 回答数4
- ありがとう数2
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1です。 Sub test() Dim RegExp As Object Dim r As Range Dim rr As Range, rs As Range Dim i As Integer, j As Integer Dim match, v ReDim v(1 To 1, 1 To 6) Set RegExp = CreateObject("VBScript.Regexp") RegExp.Pattern = "\d+" RegExp.Global = True i = 7 For Each r In Range("D1", Cells(Rows.Count, 4).End(xlUp)) If InStr(r.Value, "(") And rr Is Nothing Then Set rr = r.Resize(3) For j = 1 To 3 v(1, j) = Split(Replace(rr.Item(j).Value, ")", ""), "(")(0) v(1, j + 3) = Split(Replace(rr.Item(j).Value, ")", ""), "(")(1) Next rr.Item(1).Offset(, 1).Resize(, 6).Value = v ReDim v(1 To 1, 1 To 6) With rr.Resize(1).Offset(3) If RegExp.test(.Value) Then For Each match In RegExp.Execute(.Value) rr.Item(1).Offset(, i).Value = match.Value i = i + 1 Next End If End With ElseIf LenB(r.Value) < 1 Then Set rr = Nothing i = 7 End If Next Set RegExp = Nothing Set rr = Nothing Erase v End Sub ご参考程度に。
その他の回答 (3)
- n-jun
- ベストアンサー率33% (959/2873)
ANo.3です。 データの区切りとして空白セルが存在しない場合があり、且つ必ず”全角文字”で区切る事が出来るのであれば、 ElseIf LenB(r.Value) < 1 Then を ElseIf LenB(r.Value) < 1 Or (r.Value = StrConv(r.Value, vbWide)) Then としてみて下さい。 それ以外で不具合があれば提示願います。
- fujillin
- ベストアンサー率61% (1594/2576)
2段階に分ければよいのでは? 1)列→行への変換は「形式を選択して貼り付け」で可能ですから これをマクロの自動記録で行えば、ほぼ同等のコードができます 2)ANo1さんがご指摘のように()内を取り出す部分は、すでにわかってい るでしょうからこれを下の行に表示するようにする。 つなげたければ、そのままマクロをつなげればOKです。
- n-jun
- ベストアンサー率33% (959/2873)
直接の回答ではないですが。 Excelのマクロで()内の文字を抽出して書き出したい http://okwave.jp/qa4373238.html 前回ご質問のリンクを貼っておいた方がBetterな気がしますけど。 (類似したご質問と受け取りました)
お礼
補足ありがとうございました。
関連するQ&A
- Excelのマクロで()内の文字を抽出して書き出したい
HTMLにあるテーブルの部分をコピペして貼り付けたExcelファイルがあります。 A~Cまでの3列が埋まっている状態で、D以降の列は空欄です。 C列に123(1112)というように、数字(数字)の記載になっている部分があります。 ()の前と、中は必ず半角数字で、桁は1桁~5桁までと幅広い状態です。 この()内の数値をD~F欄に書き出したいです(縦3列のものを、横3列として書き出したい) 数字(数字)という記載のセルは、必ず縦に3つ並んでいますが C列は膨大なセル数なうえに、数字(数字)という記述以外のセルも間に入っております(数字のみのセルか、空欄のセルです) 3つ並んでいる部分のみを探して、()内の数値を抽出し、D~F列に書き出すことは可能でしょうか? 書き出す場所は、3つ並んでいるC列の最初のセルの横のD~Fだと助かります。 (数字(数字)がC6~8にあった場合、D6~F6に書き出される) なお、数字(数字)というセルはC列以外にはなく、4つ以上縦に並ぶ事もありません。 さすがにこのような内容を実行するのは不可能でしょうか? もし可能でしたら、マクロを組んでいただきたいです・・・よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excelで曜日・数字が含まれた文字列を曜日別に分割したいです
Excel関数で悩んでいます。 ひとつのセルに曜日と数字が入っていた場合に 数字別に曜日を分割する方法はあるでしょうか。 例) 月 火 水 木 金 土 日 月:500、水:800 500 800 月火:700、木:500 700 700 500 月:500、火水木金:700 500 700 700 700 700 上記のようにです。 条件のセルはひとつです。月~日は別セルです。(内容は数字になる) MINとかLENと使って数字を抜くことはできても複数の条件に対しての 数字がどうしても読み取れません。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- 選択日付(曜日)を◎で表示させたいのですが
選択日付(曜日)を◎で表示させたいのですが ■選択 B1=年 C2=月 ■選択条件(入力規則/リスト選択) D3=リスト(月・火・水・木・金・土・月水金・月金・火木土・火木) から D20=リスト(月・火・水・木・金・土・月水金・月金・火木土・火木) ■一覧表表示 CT2 から DX2 まで横一行に1日から31日までの日付 その下の行から表示エリア CT3 から DX20 までの表にその選択年月のリスト指定曜日に 「◎」を表示させたい。 ■例(B1=22年 C2=6月 D3=月曜) CZ3=7日/DG3=14日/DN3=21日/DU3=28日 該当セルに◎表示 それ以外のセルは空白 どうぞお知恵をよろしくお願い致します。
- ベストアンサー
- その他([技術者向] コンピューター)
- エクセルで半角数字には数値と文字列がある?
http://okwave.jp/qa/q6473596.html の質問を見て私も納得がいかず質問させていただきます。 たとえば、A1セルの書式を文字列に設定してから半角で数字を打ち込むと数字は数値でなく文字列としてセルに入ります。 この入力後、A1セルの書式を標準や数値に直してもそのセルの中の数字は左に寄ったままで文字列のままでいるようです。 (でもこれをセルの中でエンターキーを押したりすると数値になってしまいますが) 次にB1セルの書式を標準あるいは数値にして数字を打ち込むと、当然のことですが数字は数値としてセルに入ります。 この入力後、B1セルの書式を文字列に変えると数字は左に寄りますから一見文字列になったように見えます。 ところが上記のセルとこのセルをA1=B1で試してみるとFALSEが返ります。 逆に同じ数字を数値として打ち込んだセルと=で試すとTRUEが返ります。 これはA1とB1は同じ文字列としての数字ではないという証拠だと思います。 B1セルの書式を標準に戻すとまた数字は右よりにもどりますから、セルの中の数字は数値のままのようです。 つまり、半角の数字にはセルの書式にかかわらず文字列と数値の二つがあるということなのでしょうか? だとしたらこの二つはどうやって区別すればいいのでしょうか?
- ベストアンサー
- その他MS Office製品
- エクセル 関数
A B C D 10/1 金 9:00 12:00 10/2 土 9:00 13:00 10/3 日 9:00 14:00 10/4 月 9:00 11:00 10/5 火 9:00 15:00 : : : 5 5 2 3 Aは日付です。 Bは曜日です。 Cは出勤時間 Dは退勤時間 そこでお聞きしたいのですが・・ 12:00まで働いた曜日別のデーターがほしいのですが・・ 曜日 12:00 15:00 18:00 月 1 2 1 火 2 1 1 水 1 0 0 木 1 0 1 : : : : 上記のような感じにしようと思っています。 関数がわからなく困っています。 宜しくお願いします。。
- ベストアンサー
- オフィス系ソフト
- エクセルの関数について
エクセルに詳しくないので関数に強い方宜しくお願いいたします。 シート1の1行目に月・火・水・木・金・土・日と曜日を入れ、2行目にその曜日に合わせた月曜日が「3」、火曜日が「9」、水曜日が「4」など決まった数字を入れるとします。 シート2に月間の7/1から7/31で水曜日から始まる表を作り、その下の行にシート1に入れた7/1(水)だったら「4」、7/2(木)なら・・・と数字が表示されるような関数はあるでしょうか?
- 締切済み
- Excel(エクセル)
- エクセル関数の問題を教えください
問題 関数を使用し、下記の例題のような予定表の日、曜日を表示させてください (1)2011年2月の予定表を作成してください (2)2011年3月の予定表を作成してください (月末の日が月により変わりますので、その部分を関数で作成してください) (曜日部分は全て関数で作成してください) 例題 3 月予定表 日 曜日 予定 1 火 2 水 3 木 4 金 5 土 6 日 7 月 8 火 9 水 10 木 11 金 12 土 13 日 14 月 15 火 16 水 17 木 18 金 19 土 20 日 21 月 22 火 23 水 24 木 25 金 26 土 27 日 28 月 29 火 30 水 31 木
- ベストアンサー
- Windows XP
- EXCEL 条件付き書式
過去の質問を検索したのですが見つからなかったので投稿させていただきました。 Excel2010を使用しています。 カレンダーを作成して日曜日と祝日と隔週月曜日の列に条件付き書式で色をつけたいのですが 教えていただけないでしょうか? ちなみに25日締めなので 26日~翌月25日までのカレンダーです。 B 3 26 27 28 29 30 31 1 2 3 4 5 6 7 8 9 10 11 4 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 5 ○○ 6 △△ 7 ×× 8 合計 B3(26) は 2013/2/26 表示形式 d B4(土)は=B3 表示形式 aaa 表が揃ってなくてわかりにくいですが日にちの下のセルに曜日がはいるようになっています。 祝日一覧を作成し、祝日と日曜日は=OR(WEEKDAY(B$3)=1,COUNTIF(祝日,B$3)) で条件付き書式で色を変更できたのですが 隔週月曜日はいろいろと試してみたのですがうまく設定できません。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセルで並べ替えした値ごとにグループ分けしたい。
はじめまして。エクセルでどのような式を入れていいのか悩んでいます。 下記のようなファイルで”列D”の値ごとに 数字又はアルファベットなどでグループ分けを”列C”にしたいと思っています。 A B C D 1 日付 曜日 区分 基準値 2 4/1 水 ここ 50010001500 3 4/2 木 ここ 50010001500 4 4/3 金 ここ 100015002000 5 4/4 土 ここ 100015002000 6 4/5 日 ここ 50010001500 ・ 34 5/3 日 ここ 200030005000 ・ 184 9/30 水 ここ 50010001500 列Dを並べ替えて、C2セルには =SUMPRODUCT(1/COUNTIF(D$2:D2,D$2:D2)) C3セルには =SUMPRODUCT(1/COUNTIF(D$2:D3,D$2:D3)) …そのままC184セルには =SUMPRODUCT(1/COUNTIF(D$2:D184,D$2:D184)) といった数式を入れたところ、D列の値ごとに数字をふれました。 …小数点の付いたものですが…サイトを検索して利用してみたので、 あまりSUMPRODUCTを理解していません。 しかしながら、重くなりすぎて、しまいには固まってしまいます。 このシートが80枚ぐらい入れたファイルです。 最終的にはこのファイルの隣に、導いた列Cの値をVLOOKUPにて ”1”を”A”、”2”を”B”…と置き換えています。 何か良い方法がありましたら教えてください。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセル関数 countのことで教えて下さい
初歩な質問でスミマセン。。周りに聞ける人がいないものでよろしくお願いします! 月 火 水 木 金 土 日 月 火 水 木 金 土 日・・・・・ 10 12 15 12 22 23 10 22 25 12 30 22 35 15 ↑のような表があり、これを元に各曜日毎に15以上の曜日をカウントしたいのです。。 countif("曜日の範囲","月")等で、各曜日のカウントを現在やっているのですがその各曜日から 15未満の日をカウントしないようにする工夫はできませんでしょうか? なにとぞ宜しくお願いいたします。 ちなみにエクセルは2003です。
- ベストアンサー
- その他MS Office製品
お礼
完璧に希望通りの動きでした! 面倒な事を何度もやっていただけて本当に感謝しております。 VBA入門サイトを見ても序盤のところから分からなくて 途方に暮れておりましたが、がんばって勉強してみたいと思います。 前回の質問に引き続き、本当にどうもありがとうございました。