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

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

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

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

Q&A

解決済

2回答

1460閲覧

帳票出力する際、月と期が混在しても抽出する方法について

mowmowmilk1

総合スコア11

VBA

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

0グッド

0クリップ

投稿2019/06/15 06:28

条件に合ったデータを抽出し、別シートに印刷データを作成しています。
既に使用しているマクロを変更して使いたいのですが、いままではmonthを使用して合致する「月」のデータを抽出していましたが、今度「月」が入力してあるセルに新たに上期、下期の文字も混ぜても抽出できたらと考えています。どのように変更すれば可能なのか教えていただけないでしょうか?
なお、実際に作成する際は"表紙""C2"から"C3"以降の繰り返しになります。またコードは抜粋していますので足りないところがあるかもしれませんがご容赦ください。

A号
'必要項目を記入します。
With Sheets("A号")
Range("a65536").End(xlUp).Offset(1).Select
Selection.Value = .Range("a1").Value
Selection.Font.Size = 18
Range("a65536").End(xlUp).Offset(1).Select
Range(Selection, Selection.Offset(, 10)).Value = .Range("a2:j2").Value
Selection.Offset(, 10).Value = "点検予定月"
Selection.Offset(, 11).Value = "点検設計"
Selection.Offset(, 12).Value = "点検日"
Selection.Offset(, 13).Value = "点検結果"
Selection.Offset(, 14).Value = "備考"
Range(Selection, Selection.Offset(, 14)).HorizontalAlignment = xlCenter
'点検対象を探して記入します。
a = 3
Do Until .Cells(a, 1).Value = ""
If Year(.Cells(a, 12).Value) = Year(Sheets("表紙").Range("c2").Value) Then
If Month(.Cells(a, 12).Value) = Month(Sheets("表紙").Range("c2").Value) Then
.Cells(a, 10).Value = .Cells(a, 13).Value
.Cells(a, 13).ClearContents
.Cells(a, 11).Value = .Cells(a, 15).Value
.Cells(a, 15).ClearContents
.Cells(a, 14).ClearContents
.Range(.Cells(a, 1), .Cells(a, 10)).Copy
Range("a65536").End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders
Application.CutCopyMode = False
Range("k65536").End(xlUp).Offset(1).Value = .Cells(a, 12).Value
Range("n65536").End(xlUp).Offset(1).Value = "良 否"
End If
End If
イメージ説明
イメージ説明
出力結果
イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

VBA

1 If Year(.Cells(a, 12).Value) = Year(Sheets("表紙").Range("c2").Value) Then 2 If Month(.Cells(a, 12).Value) = Month(Sheets("表紙").Range("c2").Value) Then 3 ・・・省略・・・・ 4 End If 5 End If

上記のようになっている箇所を、以下のようにしてください。

VBA

1 If .Cells(a, 12).Text = Sheets("表紙").Range("c2").Text Then 2 ・・・省略・・・・ 3 End If

これは、セルに表示されている見たままの状態のものを比較しています。
この方法の場合、通常は問題ありませんが、L列の幅を非常に短くすると、添付図のように####が表示されます。そうなると、####の文字が比較対象になってしまい、望んだ結果が得られなくなります。
これを解決する方法はなくはないですが、冗長的なきたないコードになります。
もし、その方法を望まれる場合は、その旨、返信ください。
イメージ説明

投稿2019/06/16 01:28

tatsu99

総合スコア5424

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

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

mowmowmilk1

2019/06/17 13:24

ご回答ありがとうございます。 おかげさまで思ったように実行できました。本当に助かりました。 また機会がありましたら、教えてください。
guest

0

補足要求です。
以下の前提であってますか?
1.A号のL列の「2019下期」は文字を直接入力している。(書式設定は標準)
2.A号のL列の「2019年11月」はシリアル日付を入力し、書式設定で「2019年11月」と表示している。
3.表紙のC列の「2019年下期」は文字を直接入力している。(書式設定は標準)
4.表紙のC列の「2019年11月」はシリアル日付を入力し、書式設定で「2019年11月」と表示している。

もし、そうなら、「2019下期」と「2019年11月」はどちらかに統一できませんか。
(A号を「2019年下期」にするか、もしくは、表紙を「2019下期」にする)

投稿2019/06/15 22:25

tatsu99

総合スコア5424

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

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

mowmowmilk1

2019/06/15 23:38

早速のご連絡ありがとうございます。 1から4に関してはその通りです。 2019年下期または2019年11月で統一したいと思います。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問