Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9456 / 13646 ツリー ←次へ | 前へ→

【27225】値の振り分けです。どうかよろしくお願い... ℃素人 05/8/2(火) 19:51 質問[未読]
【27231】Re:値の振り分けです。どうかよろしくお願... ponpon 05/8/3(水) 0:13 発言[未読]
【27232】Re:値の振り分けです。どうかよろしくお願... ichinose 05/8/3(水) 0:36 発言[未読]
【27233】Re:値の振り分けです。どうかよろしくお願... ponpon 05/8/3(水) 1:02 発言[未読]
【27234】どうもありがとうございました!! ℃素人 05/8/3(水) 2:34 お礼[未読]

【27225】値の振り分けです。どうかよろしくお願い...
質問  ℃素人  - 05/8/2(火) 19:51 -

引用なし
パスワード
   はじめまして,こんばんは。
初の投稿にも関わらず質問させて頂きます事をお許しください。

質問の内容でございますが,
文章では表しにくい感がございましたので,
下のようにまとめさせていただきました。


試行 項目1  項目2   試行 項目1  項目2
1   400    A     10   400    A
2   350    A     9   500    B
3   300    B     8   450    A
4   400    A     7   550    A
5   600    B     6   500    A
6   500    A   ⇒ 5   600    B
7   550    A     4   400    A
8   450    A     3   300    B
9   500    B     2   350    A
10   400    A     1   400    A
・   ・    ・     
・   ・    ・              
・   ・    ・

まず,左から右のように変換したのですが,
そこから・・・    

項目2において,n試行(下の例の場合は1試行と2試行)前と比較し,
同じであれば same列 へ異なれば different列 へ
項目1の値を振り分けたいのです
(例えば,1試行前と比較の場合,10試行目がAで9試行目がBであれば→different列へ試行10の項目1の400を)。

試行 項目1  項目2 same different 
10   400    A      400
9   500    B      500
8   450    A   450        項目2において,
7   550    A   550        1試行前と比較する場合
6   500    A      500
5   600    B      600     
4   400    A      400
3   300    B      300
2   350    A   350
1   400    A   /   /

試行 項目1  項目2 same different 
10   400    A   400
9   500    B      500    
8   450    A   450         項目2において,
7   550    A      550      2試行前と比較する場合
6   500    A   500    
5   600    B   600     
4   400    A   400     
3   300    B      300    
2   350    A   /   /
1   400    A   /   /


という具合にしたいのですが,
当方,ずぶの素人でして困り果てておりました。
説明が稚拙で長々としており,分かりにくいかと存じ上げますが,
大変申し訳ございませんが,どなた様かご教示お願い致します。

【27231】Re:値の振り分けです。どうかよろしくお...
発言  ponpon  - 05/8/3(水) 0:13 -

引用なし
パスワード
   ▼℃素人 さん:
こんばんは。

意味がよく分からないのですが、こんな感じでしょうか?

 前提 A〜C列までのデータとする。
    same differentは、入力済みとする。
    並べ替えは、行われていないとする。 
    データ数は、A列で見ています。    以上

 test1 で、一つ下
 test2 で、一つおき となっているはずです。


Sub 並べ替え()
  
  Range("A1").CurrentRegion.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  
End Sub

Sub test1()   'すぐ下と比べて
  
  Dim i As Integer
  Dim myRow As Long
  Call 並べ替え
  
  myRow = Range("A65536").End(xlUp).Row
  Range("D2:E" & myRow).ClearContents
  For i = 2 To myRow - 1
    With Cells(i, "C")
     If .Value = .Offset(1, 0).Value Then
      .Offset(0, 1).Value = .Offset(0, -1).Value
      Else
      .Offset(0, 2).Value = .Offset(0, -1).Value
      End If
     End With
  Next
End Sub

Sub test2()  '一つ飛びと比べて
  Dim i As Integer
  Dim myRow As Long
  Call 並べ替え
  
  myRow = Range("A65536").End(xlUp).Row
  Range("D2:E" & myRow).ClearContents

  For i = 2 To myRow - 2
    With Cells(i, "C")
     If .Value = .Offset(2, 0).Value Then
      .Offset(0, 1).Value = .Offset(0, -1).Value
      Else
      .Offset(0, 2).Value = .Offset(0, -1).Value
      End If
     End With
   Next
  
  
End Sub

【27232】Re:値の振り分けです。どうかよろしくお...
発言  ichinose  - 05/8/3(水) 0:36 -

引用なし
パスワード
   ▼℃素人 さん:
こんばんは。


>初の投稿にも関わらず質問させて頂きます事をお許しください。
>
>質問の内容でございますが,
>文章では表しにくい感がございましたので,
>下のようにまとめさせていただきました。
>
>
>試行 項目1  項目2   試行 項目1  項目2
>1   400    A     10   400    A
>2   350    A     9   500    B
>3   300    B     8   450    A
>4   400    A     7   550    A
>5   600    B     6   500    A
>6   500    A   ⇒ 5   600    B
>7   550    A     4   400    A
>8   450    A     3   300    B
>9   500    B     2   350    A
>10   400    A     1   400    A
>・   ・    ・     
>・   ・    ・              
>・   ・    ・
>
>まず,左から右のように変換したのですが,
ここまではOKということなので
この先から・・・。
    

>試行 項目1  項目2 same different 
>10   400    A  
>9   500    B 
>8   450    A 
>7   550    A 
>6   500    A 
>5   600    B      
>4   400    A 
>3   300    B 
>2   350    A 
>1   400    A 

アクティブシートのA列から上記のデータが入力されているとして
(1行目が項目名、データは2行目以降)

'======================================================
Sub main()
  Dim comptry As Variant
  Dim rng As Range
  comptry = Application.InputBox("比較する試行前入力", , , , , , , 1)
  'ここで、1とか2とかを指定します。

  If TypeName(comptry) <> "Boolean" Then
    Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp))
    If rng.Row > 1 Then
     With rng.Offset(0, 3).Resize(, 2)
       .Formula = Array( _
         "=if(a2<=" & comptry & ",""***"",IF(C2=C" & 2 + comptry & ",B2,""""))", _
         "=if(a2<=" & comptry & ",""***"",IF(C2=C" & 2 + comptry & ","""",b2))")
       End With
     End If
    End If
End Sub

上記のコードを実行して見てください。
入力要求がありますから、1試行前と比較なら、1
2試行前と比較なら、2
と指定して下さい。

【27233】Re:値の振り分けです。どうかよろしくお...
発言  ponpon  - 05/8/3(水) 1:02 -

引用なし
パスワード
   こんばんは。

セルに入っている関数を見て、「そうか。なるほどね。」とつぶやいてしまいました。

まだまだ、勉強が足りません。

【27234】どうもありがとうございました!!
お礼  ℃素人  - 05/8/3(水) 2:34 -

引用なし
パスワード
   ichinose様

どうもありがとうございます。
完璧に動作できました。
本当に助かりました。ありがとうございました。
これを機にVBAをしっかりと勉強させていただきます。
何度もしつこいかもしれませんですが,本当にありがとうございました。

ponpon様

ご教示ありがとうございました。
説明が分かり辛かったですね。申し訳ありません。

9456 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free