Excel VBA質問箱 IV

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

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


11155 / 13644 ツリー ←次へ | 前へ→

【17806】グループの判別 KAME 04/9/8(水) 10:00 質問[未読]
【17807】Re:グループの判別 IROC 04/9/8(水) 10:25 回答[未読]
【17810】Re:グループの判別 KAME 04/9/8(水) 10:47 質問[未読]
【17811】Re:グループの判別 ちゃっぴ 04/9/8(水) 10:51 発言[未読]
【17813】Re:グループの判別 IROC 04/9/8(水) 11:35 回答[未読]
【17815】Re:グループの判別 KAME 04/9/8(水) 11:47 質問[未読]
【17818】Re:グループの判別 IROC 04/9/8(水) 12:53 回答[未読]
【17823】Re:グループの判別 KAME 04/9/8(水) 14:19 お礼[未読]

【17806】グループの判別
質問  KAME  - 04/9/8(水) 10:00 -

引用なし
パスワード
   お世話になっております。

シート上に以下のような文字があるとします。
   A   B C
1 testA  G1
2 testA  G1
3 testA  G2
4 tsetA  G1
5 testB  G3
6 testB  G3
7 testB  G3
8 testC  G2
9 testC  G2
10 testC  G4
11 testD  G5
12 testD  G5
13 testD  G5
・ ・   ・
・ ・   ・
・ ・   ・

とA列は名前が、B列はグループが書かれています。

testAという名前の中でで3行目がG2と表示されています。
他のtestAはG1と表示されています。
このような時にエラーを表示させたいです。

他の名前testBは全てG3なのでOKです。

testCは10行目がG4で他のtestCはG2なのでエラーです。
testDは全てG5なのでOK

名前が1つのグループ内にあればOKで
2つ以上のグループをまたがっていればエラー

A列の名前は作業する人ごとに任意の名前を付けます。
グループはG12まであります。

この説明で、やりたいことが分かって頂けましたでしょうか?
ご質問等ありましたらレスください。
ご協力のほど宜しくお願いいたします。

【17807】Re:グループの判別
回答  IROC  - 04/9/8(水) 10:25 -

引用なし
パスワード
   >エラーを表示させたいです。
どこにでしょうか?

【17810】Re:グループの判別
質問  KAME  - 04/9/8(水) 10:47 -

引用なし
パスワード
   ▼IROC さん:
>どこにでしょうか?
msgboxです。

ちなみに今はこのようなマクロを考えているのですが、もっとうまい方法があればと思い質問しました。

Dim G_cont As Integer
Dim G_Name As String
Dim G_Bank As String
Dim G1 As Integer
Dim G2 As Integer
Dim G3 As Integer
Dim G4 As Integer
Dim G5 As Integer
Dim G6 As Integer
Dim G7 As Integer
Dim G8 As Integer
Dim G9 As Integer
Dim G10 As Integer
Dim G11 As Integer
Dim G12 As Integer
Dim WrngG1 As Integer

G_cont = Worksheets("Sheet12").Range("A65536").End(xlUp).Row

G_Name = Worksheets("Sheet12").Cells(1, 1).Value
G_Bank = Worksheets("Sheet12").Cells(1, 2).Value

For G1 = 2 To G_cont
 If G_Name = Worksheets("Sheet12").Cells(G1, 1).Value Then
  If G_Bank <> Worksheets("Sheet12").Cells(G1, 2).Value Then
   WrngG1 = 1
  End If
 ElseIf G_Name <> Worksheets("Sheet12").Cells(G1, 1).Value Then
  G_Name = Worksheets("Sheet12").Cells(G1, 1).Value
  G_Bank = Worksheets("Sheet12").Cells(G1, 2).Value
  For G2 = G1 To G_cont
   If G_Name = Worksheets("Sheet12").Cells(G2, 1).Value Then
    If G_Bank <> Worksheets("Sheet12").Cells(G2, 2).Value Then
     WrngG1 = 1
    End If
   ElseIf G_Name <> Worksheets("Sheet12").Cells(G2, 1).Value Then
    G_Name = Worksheets("Sheet12").Cells(G2, 1).Value
    G_Bank = Worksheets("Sheet12").Cells(G2, 2).Value
    For G3 = G2 To G_cont
     If G_Name = Worksheets("Sheet12").Cells(G3, 1).Value Then
      If G_Bank <> Worksheets("Sheet12").Cells(G3, 2).Value Then
       WrngG1 = 1
      End If
     ElseIf G_Name <> Worksheets("Sheet12").Cells(G3, 1).Value Then
      G_Name = Worksheets("Sheet12").Cells(G3, 1).Value
      G_Bank = Worksheets("Sheet12").Cells(G3, 2).Value
      For G4 = G3 To G_cont
         ・
         ・
         ・
         ・
         ・
   End If
  Next G2
 End If
Next G1

If WrngB1 = 1 Then
  MsgBox "error"
End If


宜しくお願いいたします。

【17811】Re:グループの判別
発言  ちゃっぴ  - 04/9/8(水) 10:51 -

引用なし
パスワード
   RDB(リレーショナルデータベース)の手法を勉強したほうがいいですね。

こういう場合、あらかじめこういう対応表(テーブル)を用意しておきます。
   [A]     [B]
[1] testA     G1
[2] testB         G3
[3] testC     G2
[4] testD     G5

これをSheeet2においておき、

Sheet1のB列に下記の関数を入力します。
=OFFSET(Sheet2!R1C2, MATCH(RC[-1], Sheet2!R1C1:Sheet2!R10C1)-1,,)

そういう風にしておけば、このような現象事態が発生しないのでは?
メンテナンスも楽ですし・・・

【17813】Re:グループの判別
回答  IROC  - 04/9/8(水) 11:35 -

引用なし
パスワード
   上手い方法か分かりませんが・・


Sub Sample1()
Dim myDic As Variant, ret As Variant
Dim i As Long

  Set myDic = CreateObject("Scripting.Dictionary")
    
    For i = 1 To Range("A65536").End(xlUp).Row
      If Cells(i, 1).Value = Cells(i + 1, 1).Value Then
        On Error Resume Next
        myDic.Add Cells(i, 2).Value, ""
        On Error GoTo 0
      Else
        ret = myDic.keys
          If UBound(ret) <> 0 Then _
          MsgBox Cells(i, 1).Value & " は、エラーです。", 48, "エラー"
        myDic.RemoveAll
      End If
    Next i
End Sub

【17815】Re:グループの判別
質問  KAME  - 04/9/8(水) 11:47 -

引用なし
パスワード
   ちょっと説明の補足をします。

1.ある入力用シートを読み込みます
この入力用シートは入力範囲が32×32(行×列)の範囲であったり28×28であったりします。

2.入力範囲に名前を入力します。
名前は作業する人が任意で決めます。

3.入力範囲にはグループ分けがしてあります。
28×28を12グループに分けてあります。65セルづつで分けてある。
(4セルは使用しない場所)

それで、シートに書き込んだ名前とそのグループを
別シートに以下のように取り出すところまでは出来ています。

   A   B C
1 testA  G1
2 testA  G1
3 testA  G2
4 tsetA  G1
5 testB  G3
6 testB  G3
7 testB  G3
8 testC  G2
9 testC  G2
10 testC  G4
11 testD  G5
12 testD  G5
13 testD  G5
・ ・   ・
・ ・   ・
・ ・   ・

ここで同じ名前が、同じグループ内に入力されているかどうかの判別をしたいのです。

宜しくお願いいたします。

【17818】Re:グループの判別
回答  IROC  - 04/9/8(水) 12:53 -

引用なし
パスワード
   私の掲載したコードに対する回答は無いのでしょうか?

【17823】Re:グループの判別
お礼  KAME  - 04/9/8(水) 14:19 -

引用なし
パスワード
   ▼IROC さん:
>私の掲載したコードに対する回答は無いのでしょうか?
すみません。
サンプルコードありがとう御座います。
IROCさんのを参考にして今作っているところです。
なんとかなりそうです。
ありがとう御座います。
また、煮詰まったら質問させていただきます。

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