
エクセルで日報を作成しています。
1sheetに365日分のセルを作成。
A1のセルに3月と入力すると以下の365行が「3月1日~3月31日」の
31行分の1か月分が表示になるようにするにはどんなテクニックが必要でしょうか?エクセルを終了して、その条件はキープしていて欲しい。
《元データ》
A列 B列 C列 D列
1 月
2
3 月日 曜日 本日の容量 残容量 合計
4 1月1日 月 150 20 170
5 1月2日 火 150 20 170
6 1月3日 水 200 20 220
7
:
368 12月31日........
《入力結果》
A列 B列 C列 D列
1 3 月 ←このつきの前に「表示月」を入力 例えば「3」
2
3 月日 曜日 本日の容量 残容量 合計
4 3月1日 木
5 3月2日 金
6 3月3日 土
:
34 3月31日土
が表示される。
No.7ベストアンサー
- 回答日時:
No.2です。
> タイトル行に当たる「月日,曜日,本日の容量,残容量,合計」が
> 消えてしまいます。
あれおかしいですね。タイトル行は質問文にあるとおり3行目から始まってますか?
> やはり「オートフィルター」のマークがB1にも入ってしまうものなのですよね?
これは仕方がないです。A列だけなら▼マークを非表示にできるのですが、他の列はどうしてもマークが出てしまいます。
それが出るのが嫌なのでオートフィルタを使いたくないのであれば、アプローチを変えて、オートフィルタを使わずに、指定した月以外は非表示にするマクロにしてみました。No.2の回答の手順でマクロの画面を開き、元のマクロは消して以下をコピーして貼り付けてみてください。
No.2の回答と同様に、A1に月の数字を入力すると、その月だけの表示になります。A1を空白にするか、0などの数値を入力すると1年分の表示に戻ります。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
Application.ScreenUpdating = False
Dim i As Integer
Const MaxRow As Integer = 370
For i = 4 To MaxRow
If Target.Value < 1 Or Target.Value > 12 Then
Rows(i).Hidden = False
ElseIf Month(Cells(i, 1).Value) = Cells(1, 1).Value Then
Rows(i).Hidden = False
Else
Rows(i).Hidden = True
End If
Next
Application.ScreenUpdating = True
End Sub
おかげさまで、For i = 4 To MaxRowをFor i = 3 To MaxRowに書き換えたら出来るようになりました。
マークはやっぱり出ちゃいますかねぇ~
運用で工夫してみたいと思います。
ありがとうございました。
No.8
- 回答日時:
>エクセルのオートフィルタを使わないフィルタ方法を伝授してください
なぜオートフィルタを避けているのか、理由はわかりませんが奇異です。
これを使わなければ、エクセルVBAででも使わないとできませんよ。
色々注文をつけると、VBAやそれ以上のことを使わないとできなくなります。
素人がやりたいことを出すと、結構難しい。経験者はその難しさにぶつかることを察知して、1年分を1シートにして、そこから1月分を
抜き出そうというような発想を避けます。
既回答にも、関数式だけで条件該当分を別シートなどに抜き出す式が出ています。しかし恐ろしく長く、内容を理解するのが難しいです。
私はそれを回避するため、作業列を1列使い、条件を満たす(XX月分
という条件)行のみ上から連番を振ります。別シートでその連番を元にINDEXとMATCH関数を使ってデータを持ってきます。それをimogasi
方式として、OKWAVEで沢山回答してます。WEB照会してよければ見てみてください。
ーー
VBAでxx月以外は行を非表示にすることはたやすいが、可視セルを相手にする必要があって、面倒になるかも知れません。
VBAで別シートへXX月分だけ分離するのは難しくありません。その後の
追加削除に連動できませんが。
そんなに難しいこととは判らず大変失礼をいたしました。
ただこの用紙を利用なのみなさんはExcelすら出来ないため、
年齢も50歳後半のため出来るだけ、開けばすぐできる形を作りたかっただけです。
そういう内容の質問をしてはいけないことも十分判りました。
貴重な時間感謝いたします。
No.6
- 回答日時:
こんにちわ
月頭を出したいだけでしたら、ジャンプ機能を利用されるといいと思います。
マクロはご無理とのことなので計算式でやろうかとも考えましたが、それだとファイルサイズが大きくなるので、ご質問には反しますがオートフィルタが手っ取り早いと思います。各日付のとなりに1から12の数字を打ち(月の数という意味)、その列でフィルタをかけます。
計算式を入れるか数値を入れるかの違いだと思います。
No.5
- 回答日時:
ご質問者の意図とは若干違うかもしれませんが、フィルタオプションとVBAの組み合わせで比較的簡単に作れるかもしれません。
ただし「月」を条件にしたければ、月日から月を作成する関数(MONTH関数など)で月のみを表示する列を作成しておく必要があります。
そのような列を作れば、ブックのイベントプロシージャ(SheetChage)等に、フィルタオプションの機能をVBAスクリプトとして記述することで可能だと思います。
参考までに(表のサイズなどはそちらで任意に読み替えてください)
Public Sub Data_filter()
Range("A5:S55").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= Range("C1:C2"), Unique:=False
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveCell.Column = 3 Then
If Cells(2, 3).Value = "" Or IsNull(Cells(2, 3)) Then
ActiveSheet.ShowAllData
Else
Call Data_filter
End If
End If
End Sub
No.4
- 回答日時:
簡単な方法としては・・・
シートを2枚に分ける。
Sheet1には1年分のデータ。
Sheet2は1ヶ月分(31行)のみ表示させる。
A4のセルに“=DATE(YEAR(TODAY()),A1,1)”、
A5以下はA4+1,A5+1でOKです。
B列以降は、LOOKUPなりVLOOKUPなりで、Sheet1を参照する、
というのでどうでしょう。
すみません。Excelの入力は得意なのですが、
マクロや関数がまったくわかりません。
皆さんのアドバイスを1ずつやっていますが、
フィルター後「本日の容量」「残容量」「合計」の入力をします。
別のSheetにすると、元データに反映されません。
No.3
- 回答日時:
関数でやってみます
「入力結果」シートのA4セルに以下の式を貼り付けて右方向、および下にコピー。A1セルの月は「数値」で入力します(日付ではありません)
各列の書式は適切なものに再設定してください。
=IF(SUMPRODUCT((MONTH(元データ!$A$4:$A$369)=$A$1)*1)-ROW()+4>0,INDEX(元データ!A$1:A$369,LARGE(INDEX((MONTH(元データ!$A$4:$A$369)=$A$1)*ROW(元データ!$A$4:$A$369),),SUMPRODUCT((MONTH(元データ!$A$4:$A$369)=$A$1)*1)-ROW()+4)),"")
うるう年なら5箇所の$A$369は$A$370になります。
マクロも関数もまったくわからない低レベルに親切な回答ありがとうございます。
結果だけを参照するのであれば問題ないのですが、
データを日々入力し、月末に出力をしなくてはなりません。
出来れば、入力後の確認なども行いますので、
月を打ち込んだだけで、1か月分が確認できるほうが
ど素人には単純な操作で出来るほうが良いかと思っています。
No.2
- 回答日時:
マクロを使ってもよいですか?(マクロの中で結局オートフィルタを使ってますが)
シートタブを右クリックして「コードの表示」を選択してVBAの画面を開き、下のマクロをコピーして貼り付けてください。
A1に値を入れるとその月だけの表示に変わります。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Target.Value < 1 Or Target.Value > 12 Then Exit Sub
Dim EndDay As Long
EndDay = Day(DateSerial(Year(Date), Range("A1") + 1, 1) - 1)
Range("A3").AutoFilter Field:=1, Criteria1:=">=" & Range("A1").Value & "月1日", Operator:=xlAnd, _
Criteria2:="<=" & Range("A1").Value & "月" & EndDay & "日"
End Sub
マクロも関数もまったくわからない低レベルに親切な回答ありがとうございます。
質問です。
理想どおり、3月のみの表示になりましたが、
タイトル行に当たる「月日,曜日,本日の容量,残容量,合計」が
消えてしまいます。
やはり「オートフィルター」のマークがB1にも入ってしまうものなのですよね?
No.1
- 回答日時:
月日は日付形式ですよね。
C1="月日"
C2=">="&$A$1&"月1日"
D1="月日"
D2="<"&($A$1+1)&"月1日"
で次の処理を「ツール」「マクロ」「新しいマクロの記録」でマクロ化する。
「データ」「フィルタ」「フィルタオプションの設定」
・「データ範囲」「=$A$3:$E$369」
・「抽出条件範囲」「=$C$1:$D$2」
でOK
これで出来たマクロを、ショートカットキーかボタンに登録して実行する。
C1:D2の見た目が問題なら文字色を背景色と同じにすれば表示も印刷もされません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセル・オートフィルタを使わず関数で抽出をするには
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
【Excel】 空白以外の行を選択するマクロを教えてください。
Excel(エクセル)
-
4
VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー
Excel(エクセル)
-
5
エクセルVBA 複数の条件を含む対象を抜き出す。
その他(Microsoft Office)
-
6
Excelのオートフィルタで抽出したものを配列で取得したい
Excel(エクセル)
-
7
Excel VBAでオートフィルタで抽出した列データを別シートの最終行にコピーするには
Visual Basic(VBA)
-
8
EXCEL VBA データを抽出して別シートへ貼り付ける方法
Excel(エクセル)
-
9
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
10
(Excel)あるセルに文字を入力しただけで、同じブック内のほかのワークシートにも、同じ文字が自動的に入るようにするには?
Excel(エクセル)
-
11
Select Case文でこのようなことは可能でしょうか?
Visual Basic(VBA)
-
12
EXCELのオートフィルの設定を変えたい
Excel(エクセル)
-
13
日付を入力したセルをファイル名にして保存するには
Excel(エクセル)
-
14
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
15
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
16
VBAで条件が一致する行のデータを別シートに抽出
Excel(エクセル)
-
17
保存先のフォルダ名を指定したいとき
Visual Basic(VBA)
-
18
【ExcelマクロVBA】抽出したデータをリストボックスで表示させるマクロ
Excel(エクセル)
-
19
[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。
Access(アクセス)
-
20
エクセルVBAで複数の条件を満たす検索方法
Visual Basic(VBA)
関連するQ&A
- 1 エクセルVBA オートフィルタについて教えてください。 オートフィルタの結果の個数を同じブックの別シ
- 2 エクセルVBAで、オートフィルタを使用し、別ブックにフィルタ結果の個数を、反映させる方法を、教え下さ
- 3 エクセル オートフィルタを効率よく使う方法
- 4 Excel2003でシート保護(オートフィルタ使用にはチェック)するとマクロのオートフィルタでエラーになる
- 5 エクセルのオートフィルタで最初の数行を残してフィルタをしたい
- 6 エクセルでオートフィルタ中のグラフ作成
- 7 エクセルのオートフィルタ 列をまたいだ「or」設定方法
- 8 エクセルでオートフィルタを使って・・・
- 9 エクセル98でオートフィルタを使う時
- 10 エクセル オートフィルタを使わないで計算したい
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
Excel 書式を関数で判断。
-
5
エクセルでマウスカーソルの形...
-
6
excelで1つのセルだけを分割す...
-
7
あるセルに特定の文字列を打つ...
-
8
エクセルの計算結果が0になって...
-
9
エクセル: セルの枠を超えて表示
-
10
エクセルが閉じない
-
11
エクセルでセルが指定できない
-
12
EXCELでセル内に打った文字が隠...
-
13
エクセル 表を大きく、紙いっ...
-
14
エクセルで、条件に一致した行...
-
15
DATファイルをEXCELで開きたい
-
16
エクセル 特定の文字を入れる...
-
17
EXCELでX軸が時間のグラフを作...
-
18
EXCELのセル上のURLを...
-
19
エクセルの2ページ目の作り方
-
20
エクセルで在庫の入荷日管理を...
おすすめ情報