2017-07-25 4 views
0

列の数を可変にすることができるグラフのデータを比較するよう依頼されましたが、現時点では最大20個ですが、変更できる可能性があると言われていますできるだけ動的なものにしておきます。可変数の列でのセルの比較

目的は、行内のすべてのセルにまったく同じ文字列が含まれているか、空白であることを確認することです。したがって、5つの列がある場合、3つはデータ「良い」を持ち、残りの2つは空白です。

グラフは常に左上隅から始まり、常にヘッダー行と行名の両方を持ちます。

私は各セルを各行の最初のセルと比較すると思っていましたが、可変セルを比較する方法を見つけることはできません。

私はVBAを使うのがとても新しく、完全に独学で教えているので、間違ったところにいるかもしれません。

これは私のサンプルコードですが、私はこの機能を得るためにいくつかのDoループを実行する必要があることを知っていますが、この部分を最初に働かせたいと思っていました。

Sub Row_Checker() 

    Dim Col_Count As Integer 
    Dim I As Integer 


    Range("a1").Select 
    Range(Selection, Selection.End(xlToRight)).Select 


    Col_Count = Application.WorksheetFunction.CountA(Selection) 


    Selection.End(xlToRight).Select 
    ActiveCell.Offset(1, 1).Range("A1").Select 

    For I = 2 To Col_Count 
     If ("B" & (ActiveCell.Row)) = ("B" & (ActiveCell.Row).Offset(0, I) then 


End Sub 
+1

不一致があるときに何をしたいのですか?同じ行のすべての列が空白であるか同じであるときに何をしたいのですか? – Jarom

+0

また、列2から開始します。列Aを無視しますか?そして、各行は特定の値にする必要がありますか? 'A1'の値と同様に、1行目の他の値と同じにする必要がありますか?または、それらはすべてランダムな値でもかまいませんが、各行で同じ値にする必要がありますか? – BruceWayne

+0

また、行1は空白のないヘッダー行ですか?そうでない場合、最初の行に空白がある場合、 'col_count'変数は不正な値を持つ可能性があります。私は行2で反復を開始していると仮定していますが、二重チェックしたいだけです。 – Jarom

答えて

0

より効率的なコードについては、いくつか推奨します。私はループを書くことも手伝ってくれるでしょう。

まず、selectはできるだけ使用しないでください。これは非効率的であり、コードを読みにくくして破損させる可能性が高くなります。ここでは、選択する代わりに、行の最初の列の値をval1という変数に入れて、他の列をループして、その値をvalnという変数に入れます。

データが不足している可能性があるため、find関数を使用して、入力された最も低い行を見つけて、それを変数lRowに割り当てました。

次の部分では、ループ内でループを実行する必要があります。外側のループでは行を反復処理し、内側のループでは列を反復処理します。だから、行に行き、すべての列をループして、次の行に行き、同じことをします。

cells(I,J)を使用すると、ループ内の別のセルを移動できます。これはループの強力な部分です。

セルの値が一致しているか空白で、必要でない場合は何をしたいかを入力できます。

また、sheet1を実際のシート名に変更してください。独学であることに

Sub row_checker() 

    Dim Col_Count As Integer 
    Dim lRow As Integer 
    Dim I As Integer 
    Dim J As Integer 
    Dim val1 As String 
    Dim valn As String 
    Dim output As String 



    Col_Count = Application.WorksheetFunction.CountA(Rows(1)) 

    lRow = Cells.Find(What:="*", _ 
        After:=Range("A1"), _ 
        LookAt:=xlPart, _ 
        LookIn:=xlFormulas, _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlPrevious, _ 
        MatchCase:=False).Row 

     For I = 2 To lRow 
      For J = 2 To Col_Count 
      val1 = Cells(I, 1).Value 
      valn = Cells(I, J).Value 
       If val1 = valn Or valn = Empty Then 
       Else: Cells(I, J).Interior.Color = 65535 
       End If 
      Next J 
     Next I 

End Sub 

おめでとう:

は、以下のコードを参照してください。私はVBAやプログラミングでも100%独学です。私は専門家ではありませんが、途中でかなりのことを学びました。私が何を共有したかは、それが私には長すぎて学ぶのに苦労したことのいくつかです。あなたに質問がある場合は幸い、私に知らせてください。

+0

これはまさに私が欲しかったようです。アドバイスありがとう! – MRDoubleyou