ここから本文です

Excel関数の質問です。 Sheet1の表から、Sheet2、Sheet3の表を自動で生成したいと...

fur********さん

2018/6/909:00:28

Excel関数の質問です。
Sheet1の表から、Sheet2、Sheet3の表を自動で生成したいと思っています。

vlookupとmatchあたりでできるかと思って格闘したのですが、自力では不可能でした。

ちなみに実際の表は担当40人、日程は50日ほどあります。
一日当たりの担当の人数は基本は8人ですが、9人になることもあります。

臨時で日程や人が増えることがあるので、オートフィルで可変にできるとありがたいです。
ただ、可変にする際の数式の場所がわかれば修正できるくらいの知識はあるつもりです。
よろしくお願いいたします。

Sheet2,Sheet1,Sheet3,With Worksheets,End With,On Error GoTo 0,B2&quot

閲覧数:
72
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

aka********さん

2018/6/910:16:23

添付のように 一度作業表を作成すれば 出来ます。

SHEET2を 作成するためには 変換1の 表を作成します。
変換1の B2に =IF(B2="◎",COUNTIF($B2:B2,"◎"),"")といれ 右と 下にオートフィルすれば 変換1の表が できます。
そして SHEET2の B2に =IFERROR(INDEX(Sheet1!$I$1:$M$1,MATCH(COLUMN(A1),Sheet1!I2:M2,0)),"") といれ これも右と下にオートフィルすれば Sheet2の表ができます。

同様にSheet3を 作成するために 変換2の 表を作成します。

B10に =IF(B2="◎",COUNTIF(B$2:B2,"◎"),"") といれオートフィル
SHEET3の B2に
=IFERROR(INDEX(Sheet1!$A$10:$A$15,MATCH(ROW(A1),Sheet1!B$10:B$15,0)),"") といれ オートフィル

添付のように 一度作業表を作成すれば 出来ます。

SHEET2を 作成するためには 変換1の...

  • 質問者

    fur********さん

    2018/6/1505:30:48

    一度作業表を作成して、行数・列数でMATCH検索するんですね!
    すごい。非常に勉強になりました!
    ありがとうございました。
    またよろしくお願いいたします。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/6/15 05:35:32

一度作業表を作成して、行数・列数でMATCH検索するんですね!
すごい。非常に勉強になりました!
ありがとうございました。
またよろしくお願いいたします。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

kik********さん

2018/6/910:22:27

VBA で良かったですか?ダメならスルーということで

標準モジュールに以下を記述します
Samp1To2 実行では、Sheet1 → Sheet2 へ展開
Samp1To3 実行では、Sheet1 → Sheet3 へ展開

どうなりますか


Option Explicit

Public Sub Samp1To2()
   Dim vH As Variant, vA As Variant
   Dim i As Long, j As Long, k As Long

   With Worksheets("Sheet1")
      With .Range("B2").CurrentRegion
         vH = .Rows(1).Value
         vA = .Offset(1).Resize(.Rows.Count - 1).Value
      End With
   End With

   For i = 1 To UBound(vA)
      k = 1
      For j = 2 To UBound(vA, 2)
         If (vA(i, j) <> "") Then
            k = k + 1
            vA(i, k) = vH(1, j)
            If (k <> j) Then vA(i, j) = ""
         End If
      Next
   Next

   Application.ScreenUpdating = False
   With Worksheets("Sheet2")
      .Cells.Delete
      With .Range("B2").Resize(UBound(vA), UBound(vA, 2))
         .Value = vA
         .Borders.LineStyle = xlContinuous
         .Offset(, 1).Resize(, UBound(vA, 2) - 1) _
            .NumberFormatLocal = "m月d日"
         On Error Resume Next
         .SpecialCells(xlCellTypeBlanks).Clear
         On Error GoTo 0
      End With
   End With
   Application.ScreenUpdating = True
End Sub


Public Sub Samp1To3()
   Dim vH As Variant, vA As Variant
   Dim i As Long, j As Long, k As Long

   With Worksheets("Sheet1")
      With .Range("B2").CurrentRegion
         vH = .Columns(1).Value
         vA = .Offset(, 1).Resize(, .Columns.Count - 1).Value
      End With
   End With

   For j = 1 To UBound(vA, 2)
      k = 1
      For i = 2 To UBound(vA)
         If (vA(i, j) <> "") Then
            k = k + 1
            vA(k, j) = vH(i, 1)
            If (k <> i) Then vA(i, j) = ""
         End If
      Next
   Next

   Application.ScreenUpdating = False
   With Worksheets("Sheet3")
      .Cells.Delete
      With .Range("B2").Resize(UBound(vA), UBound(vA, 2))
         .Value = vA
         .Borders.LineStyle = xlContinuous
         .Rows(1).NumberFormatLocal = "m月d日"
         On Error Resume Next
         .SpecialCells(xlCellTypeBlanks).Clear
         On Error GoTo 0
      End With
   End With
   Application.ScreenUpdating = True
End Sub

yum********さん

2018/6/909:22:10

VBAならすぐにできそうですがシート上で関数を使ってはできたとしても結構面倒くさそうです。関数でやらないといけない理由はあるのでしょうか?

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる