2016-05-26 13 views
1

私が作成しようとしているのは、ユーザーが選択する2列のデータに基づいて散布図を作成するマクロです。私は何とか2番目の列が選択されているので、正しいタイトルを使用できるようにする必要があります。戻り値ギャップのある範囲の最後の列の列番号

私はこれまで、次の試してみた:

myrng.Columns(myrng.Columns.Count).Column 

範囲内にギャップがあるので、これは、単に1を返します。

ギャップがある範囲で動作する別の方法がありますか、またはデータをグラフ化して2番目の選択された列が見つかった可能性があります。

+0

Visual Basicエディタで、手動で何をしているのかを記録します。終了すると録音を停止し、マクロに移動して、今録音したマクロを編集します。そこでは、あなたが手動で行ったことを行うための関連コードを見ることができます。 – dinotom

+0

私はExcelのレコード機能を認識しています。しかし、これを使用して列番号を返す方法を私に見せる方法はありません。 – Corus

+0

'lastCol = ws.Cells(1、ws.Columns.count).End(xlToLeft).Column'? – findwindow

答えて

1

Rには限界があり、その後、いくつかの定義された範囲である場合:

nLastRow = r.Rows.Count + r.Row - 1 
MsgBox ("last row " & nLastRow) 

nLastColumn = r.Columns.Count + r.Column - 1 
MsgBox ("last column " & nLastColumn) 

nFirstRow = r.Row 
MsgBox ("first row " & nFirstRow) 

nFirstColumn = r.Column 
MsgBox ("first column " & nFirstColumn) 

numrow = r.Rows.Count 
MsgBox ("number of rows " & numrow) 

numcol = r.Columns.Count 
MsgBox ("number of columns " & numcol) 

EDIT#1:

これは任意の範囲で動作します、コンパクトまたは離れている。範囲が完全に空の場合でも機能します。 しかし、範囲に多数のセルがある場合、サブは非常に遅くなります。

Sub SlowAgony() 
    Dim myrange As Range, r As Range, nLastColumn As Long 
    Set myrange = Union(Range("C1:C100"), Range("G1:G100")) 

    nLastColumn = 0 
    For Each r In myrange 
     If r.Column > nLastColumn Then nLastColumn = r.Column 
    Next r 

    MsgBox nLastColumn 
End Sub 

EDIT#2:

この方法は迅速である:

Sub ytrewq() 
    Dim r As Range, addy As String, ary 
    Dim nLastColumn As Long, rr As Range 
    Set r = Selection 
    addy = r.Address(0, 0) 

    If InStr(1, addy, ",") = 0 Then 
     nLastColumn = r.Columns.Count + r.Column - 1 
    Else 
     ary = Split(addy, ",") 
     nLastColumn = 0 
     For Each a In ary 
      Set rr = Range(a) 
      If rr.Columns.Count + rr.Column - 1 > nLastColumn Then 
       nLastColumn = rr.Columns.Count + rr.Column - 1 
      End If 
     Next a 
    End If 

    MsgBox nLastColumn 
End Sub 

最後ルーチンは互いに素範囲のコンパクトな構成部品を検査します。

+0

これはギャップのない範囲では機能しますが、ギャップがあるので範囲内では機能しません。つまり、私は3列目と7列目を選択していますが、7列目は返しません。 – Corus

+0

@コーラス正しいです..............私はこの回答を取り消します....... –

+0

@コーラス私の**編集#1を参照してください:** –