• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:勤怠・明細書のデーターが入ったが、1名に付1シートあります。各シート同)

勤怠・明細書のデーターの一覧表示条件と方法

このQ&Aのポイント
  • 勤怠・明細書のデーターが入った複数のシートがありますが、特定の条件を満たしたシートのデータのみを一覧表示したいです。
  • 表示させたいシート名は「週払い一覧」とし、必要なデータのセルはAB3からAK8です。
  • 一覧表示の条件は、AJ7の値が¥0より大きい場合に限ります。該当するシート名のデータのみを週払い一覧に表示させたいと考えています。

質問者が選んだベストアンサー

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.7

>数式や参照でーたーのせるが、 #N/Aや#REFなどのエラー表示がでるのですが、 >これは、私が作数式や関数が悪いのでしょうか、 たったこれだけの情報で、悪いのかどうか解るわけがありません。 悪いのかどうか聞きたかったら、あなたが入力した数式を提示すべきです。 >値だけを文字列で表示させる事は、できますか 文字列で、というわけではありませんが、 Sh.Range("AB3:AK8").Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1) の代わりに、 With .Cells(.Rows.Count, 1).End(xlUp).Offset(1) Sh.Range("AB3:AK8").Copy .Cells(1) .Resize(6, 10).Value = Sh.Range("AB3:AK8").Value End With と書いてください。

07535373
質問者

お礼

回答ありがとうございます。 言われるとうりです。  質問の仕方がわるいですね。 スミマセン 教えていただいた とうりに書きましたら 上手く動きました。 ありがとうございました。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

>関数では無理でしょうか、 無理です。 >簡単なマクロしかできませんが・ この課題が簡単かどうかは、判っている人にしかいえません。 正面からVBAで出来る人は中級の上ぐらいではないかな。 ーーー 最小限にマクロ利用であえてやって見ます。ユーザー関数の考えを使うので、(未経験なら)難しいといえば難しいかも。たった3行なのでと思って。 本格的なマクロで説明するより易しいかなと思うが、受け取り方は人により様々か。 ーー シートは4つ。質問者がこのように質問を簡略化できれば、力のある証拠。(54でも3シートでも類推できることが条件だが。このことを判っている質問者は少ない) Sheet1 A1 大村 B2 12 Sheet2 A1 木村 B2 9 Sheet3 A1 田中 B2 13 氏名、計数のつもり。最小限簡略化。 ーー シートタブの順番でシート名を取るユーザー関数 ッ標準のジュールに Function sheetn(n) sheetn = Sheets(n).Name End Function ーーー Sheet4の第1行目には数字を入れないこと。漢字見出しはOK。 Sheet4のA2に =INDIRECT(sheetn(ROW()-1)&"!$a$1") と入れて下方向に式を複写 B2に =INDIRECT(sheetn(ROW()-1)&"!$B$2") と入れて下方向に式を複写。 ーーー 結果 Sheet4 大村 12 木村 9 田中 13 これを応用すると、1人1行の表が1シートに出来るのはわかるね。 ーーー 以下は条件に合った行に連番を振って、抜き出すための細工をする。 (Googleで「imogasi方式」で照会すれば、似た抜き出し問題に使っている例が多数が出る) C2に=IF(B2>10,MAX($C$1:C1)+1,"") と入れて下方向に式を複写。 結果 Sheet4 大村 12 1 木村 9 田中 13 2 ーー これをSheet5に、条件合致分を抜き出す。 A2に=INDEX(Sheet4!$A$2:$C$4,MATCH(ROW()-1,Sheet4!$C$2:$C$4,0),COLUMN()) B2に式複写 A2:B2の式をA4:B4まで式複写。 ーーー 結果 Sheet5 大村 12 田中 13 #N/A #N/A 該当数と複写行数によっては#N/Aがでる。これを出さないようにする方法は、上記imogasi方式の回答を見ること。ここでは略。 ーー また質問者の場合シート名を大村、木村、田中などと変更・設定しているかもしれないが、上記式はそのまま通用する。 Sheet4の順序は、シートタブの並び順になる。 シート順序を変えても被害は無い。

07535373
質問者

お礼

返事が遅くなりすみませんでした。 皆さまのおかげで 良い物が出来ました。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

>関数では無理でしょうか、 無理です。 >簡単なマクロしかできませんが・ この課題が簡単かどうかは、判っている人にしかいえません。 正面からVBAで出来る人は中級の上ぐらいではないかな。 ーーー 最小限にマクロ利用であえてやって見ます。ユーザー関数の考えを使うので、(未経験なら)難しいといえば難しいかも。たった3行なのでと思って。 本格的なマクロで説明するより易しいかなと思うが、受け取り方は人により様々か。 ーー シートは4つ。質問者がこのように質問を簡略化できれば、力のある証拠。(54でも3シートでも類推できることが条件だが。このことを判っている質問者は少ない) Sheet1 A1 大村 B2 12 Sheet2 A1 木村 B2 9 Sheet3 A1 田中 B2 13 氏名、計数のつもり。最小限簡略化。 ーー シートタブの順番でシート名を取るユーザー関数 ッ標準のジュールに Function sheetn(n) sheetn = Sheets(n).Name End Function ーーー Sheet4の第1行目には数字を入れないこと。漢字見出しはOK。 Sheet4のA2に =INDIRECT(sheetn(ROW()-1)&"!$a$1") と入れて下方向に式を複写 B2に =INDIRECT(sheetn(ROW()-1)&"!$B$2") と入れて下方向に式を複写。 ーーー 結果 Sheet4 大村 12 木村 9 田中 13 これを応用すると、1人1行の表が1シートに出来るのはわかるね。 ーーー 以下は条件に合った行に連番を振って、抜き出すための細工をする。 (Googleで「imogasi方式」で照会すれば、似た抜き出し問題に使っている例が多数が出る) C2に=IF(B2>10,MAX($C$1:C1)+1,"") と入れて下方向に式を複写。 結果 Sheet4 大村 12 1 木村 9 田中 13 2 ーー これをSheet5に、条件合致分を抜き出す。 A2に=INDEX(Sheet4!$A$2:$C$4,MATCH(ROW()-1,Sheet4!$C$2:$C$4,0),COLUMN()) B2に式複写 A2:B2の式をA4:B4まで式複写。 ーーー 結果 Sheet5 大村 12 田中 13 #N/A #N/A 該当数と複写行数によっては#N/Aがでる。これを出さないようにする方法は、上記imogasi方式の回答を見ること。ここでは略。 ーー また質問者の場合シート名を大村、木村、田中などと変更・設定しているかもしれないが、上記式はそのまま通用する。 Sheet4の順序は、シートタブの並び順になる。 シート順序を変えても被害は無い。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

例えば。 sub macro1()  dim i  dim j  for i = 1 to 54   if worksheets("Sheet" & i).range("AJ7") > 0 then    j = j + 1    worksheets("仮に週払一覧").range("A1:J1").offset(j, 0).value = _     worksheets("Sheet" & i).range("AB3:AK3").value   end if  next i end sub #ところで >全部で、今の所sheet1~sheet54まで計54枚あるのですが あなたはご相談で「全角の英数字」でsheet1などと書いていますが,それが事実なのでしょうか。 教わったマクロを「コピーして走らせるしかできない」と,そういった細かい間違いでお互いの手間暇が無駄になるばかりなので,情報提供は正確に。 >関数では無理でしょうか たとえばまとめのB列に Sheet1 と書いて下向けに54までオートフィルドラッグしておき C列に =INDIRECT(B2&"!AJ7") と書いて下向けにコピー D列に =INDIRECT(B2&"!R3C[24]",FALSE) と書いて右に計10個,下に54個コピーしておき, C列にオートフィルタを付けてゼロより大きいで絞ってやれば,欲しい一覧の体裁です。 #あとは趣味で。 A列に更に関数を付けてC列がゼロより大きい行だけに連番を付けておき,その番号を手がかりにO列より右とかに連番の行だけVLOOKUPとかで取り出し直せば,上下の詰まった表を計算だけで並べさせる事も出来ます。 A2: =IF(C2>0,COUNTIF($C$2:C2,">0"),"") とかなんとか。

07535373
質問者

お礼

返事が遅くなりました。 いろいろ ありがとうございます。 皆さまのおかげで、 納得のゆくものができました。 少しずつですが、 勉強してゆきます。 ありがとうございました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

前のは解釈誤りでした。すみません。 値として貼り付けたい?。適当なセルでマクロ作って、形式を選択して貼り付け、をやってみましたか。それを真似して反映できませんか。

07535373
質問者

補足

回答ありがとうございます。 私の返答の言葉が適切でないようですね! #2さんの マクロを実行したらチャンと条件に合った 個数だけ 週払い一覧に表示出来たのですが、 データの中に、計算式や他のセルから参照してる部分だけが エラー表示されるのですが、 これは、関数の書き方に問題があるのか! それとも参照やVLOOKUP等の関数を使っているとだめなのかが、分からないのです。 何か 方法は、有りますか。 お願いします。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

Sub test() Dim Sh As Worksheet For Each Sh In Worksheets If Sh.Name <> "週払一覧" Then With Worksheets("週払一覧") If Sh.Range("AJ7").Value > 0 Then Sh.Range("AB3:AK8").Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1) End If End With End If Next Sh Set Sh = Nothing End Sub 各シートのAB8に必ず何かが記入されていることが前提です。

07535373
質問者

お礼

失礼いました こちらの手違いで エラーがでたようです。 スミマセンでした。無事にデーターは、出てきたのですが、 数式や参照でーたーのせるが、 #N/Aや#REFなどのエラー表示がでるのですが、 これは、私が作数式や関数が悪いのでしょうか、 値だけを文字列で表示させる事は、できますか すみませんが、おねがいします。

07535373
質問者

補足

回答 ありがとうございます。 インデックスが有効範囲にありません と エラーメッセージが出るのですが、 私の張り付け型に間違いがあるのでしょうか、 御手数かけます。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

マクロでやろうとしたら あるシートを選択 1シート目のAJ7コピー あるシートのA1に貼り付け 2シート目のAJ7コピー あるシートのA21に貼り付け (54回分繰り返し) これくらいまででしょう。 これに追記して 貼り付け時は0より大きい時のみの判定、ですが、対応はVBAになると思います。