[[20090324151426]] 『こんなこと出来ますか』(パンパン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『こんなこと出来ますか』(パンパン)
 日	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
 曜	日	月	火	水	木	金	土	日	月	火	水	木	金	土	日	月	火	水	木	金	土	日	月	火	水	木	金	土	日	月	火
佐藤A	1	2	3	振	振	1	2	3	振	振	1	1	2	3	3	振	振	1	1	1	2	3	3	3	振	振	振		1	2	3
				7/1	年				7/8	7/14		△								△											
梅田B		1	2	3	振	振	1	2	3	振	振	1	1	2	3	3	振	振	1	1	1	2	3	3	3	振	振	振		1	2
					7/1	年				7/8	7/14		△								△										
原C		1	1	2	3	3			1	1	2	2	2			1	2	2	3	3			1	1	1	3	3			1	1
という表があったとして以下の表みたいに簡単にできますでしょうか、教えてください。

	1		2		3		振	
1	佐藤A							
2	梅田B	原C	佐藤A					
3	原C		梅田B		佐藤A			
4			原C		梅田B		佐藤A	
5					原C		佐藤A	梅田B
以下31日まで続く表です。


 >以下の表みたいに
だけでは???

 その規則性は???


 すみません、規則性とか何とかじゃなく上記表が簡単に下記表に代わる関数とか何かあるのでしょうか
条件は同じ日に同じ数字のヒトを横に集めるのですけど、よろしくお願いいたします。
(パンパン)

 こんにちは。かみちゃん です。

 横から失礼します。

 > 簡単に下記表に代わる関数とか何かあるのでしょうか

 私なら、VBAで処理しますが、VBAのコードの提示があれば、それを標準モジュールに
 記述(貼り付け)して実行することはできますか?

 (かみちゃん)
 2009-03-25 16:33


 かみちゃんさん、ありがとうございます、VBAはさっぱりわかりません、VBAのみなのでしょうか、
VBAでできるのであれば一回試す価値はありますね、よろしくお願いいたします。
(パンパン)

 こんにちは。かみちゃん です。

 > VBAはさっぱりわかりません、VBAのみなのでしょうか

 VBAは、さっぱりわからない方に対して、 VBAの方法を提案するのみどうかと思いますが、
 私は、数式は思いつかないので、VBAで処理する方法をとりあえず、提案してみます。

 以下のようなシートイメージの場合

 【Sheet1】
      A     B   C   D   E   F
 1  日	    1   2   3   4
 2  曜	   日  月  火  水
 3  佐藤A   1   2   3  振
 4                     7/1
 5  梅田B       1   2   3
 6
 7  原C	        1   1   2
 8

 以下のマクロSample1を実行すると、Sheet2には、以下のように2行目から出力されます

 【Sheet2】
     A          B      C      D     E
 1
 2 佐藤A
 3 梅田B 原C  佐藤A
 4 原C        梅田B  佐藤A
 5            原C    梅田B  佐藤A

 Sub Sample1()
   Dim WS1 As Worksheet
   Dim WS2 As Worksheet
   Dim vntData As Variant
   Dim vntResult As Variant
   Dim lngRow As Long
   Dim lngColumn As Long
   Dim ss As String

   Set WS1 = Worksheets("Sheet1")
   Set WS2 = Worksheets("Sheet2")
   With WS1.Range("A1")
     lngRow = .Offset(Rows.Count - .Row).End(xlUp).Row
     If lngRow Mod 2 = 1 Then
       lngRow = lngRow + 1
     End If
     vntData = WS1.Range("A1").CurrentRegion.Resize(lngRow).Value
   End With

   ReDim vntResult(1 To UBound(vntData, 2) - 1, 1 To 4)
   For lngRow = 3 To UBound(vntData, 1) Step 2
     For lngColumn = 2 To UBound(vntData, 2)
       Select Case vntData(lngRow, lngColumn)
         Case 1, 2, 3
           ss = vntResult(lngColumn - 1, vntData(lngRow, lngColumn))
           If ss <> "" Then
             ss = ss & " "
           End If
           ss = ss & vntData(lngRow, 1)
           vntResult(lngColumn - 1, vntData(lngRow, lngColumn)) = ss
         Case "振"
           ss = vntResult(lngColumn - 1, 4)
           If ss <> "" Then
             ss = ss & " "
           End If
           ss = ss & vntData(lngRow, 1)
           vntResult(lngColumn - 1, 4) = ss
       End Select
     Next
   Next
   WS2.Range("A2").Resize(UBound(vntResult, 1), 4).Value = vntResult
   MsgBox "終了しました"
 End Sub

 (かみちゃん)
 2009-03-25 23:03


 かみちゃんさん、ありがとうございます、データの範囲を示す式ってどこを換えるのですか、
たとえば現在「A3」からのデータをSheet2に書きだしていますよね、これを「A4」からとかできるのでしょうか?
(パンパン)

 こんにちは。かみちゃん です。

 > 「A4」からとか]

 とかとは何でしょうか?
 その前に
  2009-03-25 23:03
 の例示のデータでは、うまく処理されたのでしょうか?

 A3から始まっているデータがA4の場合ですと、

 偶数行開始となるので、
      If lngRow Mod 2 = 1 Then
 を
      If lngRow Mod 2 = 0 Then
 とし、さらに、4行目開始の場合は、
    For lngRow = 3 To UBound(vntData, 1) Step 2
 を
    For lngRow = 4 To UBound(vntData, 1) Step 2
 とします。

 (かみちゃん)
 2009-03-26  9:17


 かみちゃんさんありがとうございます、できました!そして舌足らずの質問で申し訳ありませんでした、今後活用させていただきます。本当にありがとうございました。
(パンパン)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.