粗茶でございます日本語 プログラミング 言語 「なでしこ」 大好き 

この記事に含まれるtag :
Excel  VBA  

スポンサーサイト

   ↑  --/--/-- (--)  カテゴリー: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

(記事編集) http://nadesocha.blog.fc2.com/?overture" target="_new

--/--/-- | Comment (-) | ホーム | ↑ ページ先頭へ ↑ |

エクセルでデータの最終行や最右列などを調べる

   ↑  2012/04/30 (月)  カテゴリー: Excel
 Excelで、データの数が決まってないとき、どこまでデータが入力されているのか調べる必要があります。
 任意のセルから下の方に空白セルが見つかるまでひとつずつデータがあるか調べたり、終端を示すデータ行まで調べたりしますが、いつも似たようなコードを書くのが面倒なので、関数をつくってみました。

 サンプルのExcelファイルはこちらからダウンロードして下さい。

Function エクセルセル表先頭行取得(ByVal myCell As String) As Long
エクセルセル表先頭行取得 = Range(myCell).CurrentRegion.Row
End Function

Function エクセルセル表末尾行取得(ByVal myCell As String) As Long
Dim myRange As Range
Dim maxRow As Long
Set myRange = Range(myCell).CurrentRegion
maxRow = myRange.Rows.Count
エクセルセル表末尾行取得 = myRange.Cells(maxRow, 1).Row
End Function

Function エクセルセル表左列取得(ByVal myCell As String) As String
Dim Result As String
Dim myRange As Range
Dim myCol_Number As Long
Dim myCol_Address As String
Dim myAdd As String
Set myRange = Range(myCell).CurrentRegion
myCol_Number = myRange.Column '列を数値で示す
myAdd = myRange.Columns(1).Address(True, False)
myCol_Address = Left(myAdd, InStr(myAdd, "$") - 1) '列を文字で示す
' Result = myCol_Number & vbCrLf & myCol_Address
Result = myCol_Number
エクセルセル表左列取得 = Result
End Function

Function エクセルセル表右列取得(ByVal myCell As String) As String
Dim Result As String
Dim myRange As Range
Dim myCol_Number As Long
Dim myCol_Address As String
Dim myAdd As String
Dim maxCol As Long
Set myRange = Range(myCell).CurrentRegion
maxCol = myRange.Columns.Count
myCol_Number = myRange.Cells(1, maxCol).Column '列を数値で示す
myAdd = myRange.Columns(maxCol).Address(True, False)
myCol_Address = Left(myAdd, InStr(myAdd, "$") - 1) '列を文字で示す
' Result = myCol_Number & vbCrLf & myCol_Address
Result = myCol_Number
エクセルセル表右列取得 = Result
End Function

Function エクセルセル先頭行取得(ByVal myCell As String) As Long
Dim myRange As Range
Dim myRow As Long
Set myRange = Range(myCell & "1")
If myRange.Value = "" Then
myRow = myRange.End(xlDown).Row
Else
myRow = 1
End If
エクセルセル先頭行取得 = myRow
End Function

Function エクセルセル末尾行取得(ByVal myCell As String) As Long
Dim myRange As Range
Dim myRow As Long
Set myRange = Range(myCell & Rows.Count)
If myRange.Value = "" Then
myRow = myRange.End(xlUp).Row
Else
myRow = Rows.Count
End If
エクセルセル末尾行取得 = myRow
End Function

Function エクセルセル左列取得(ByVal myCell As Long) As String
Dim Result As String
Dim myRange, leftRange As Range
Dim myCol_Number As Long
Dim myCol_Address As String
Dim myAdd As String
Set myRange = Range("A" & myCell)
If myRange.Value = "" Then
Set leftRange = myRange.End(xlToRight)
myCol_Number = leftRange.Column '列を数値で示す
myAdd = leftRange.Columns(1).Address(True, False)
myCol_Address = Left(myAdd, InStr(myAdd, "$") - 1) '列を文字で示す
' Result = myCol_Number & vbCrLf & myCol_Address
Result = myCol_Number
Else
' Result = "1" & vbCrLf & "A"
Result = "1"
End If
エクセルセル左列取得 = Result
End Function

Function エクセルセル右列取得(ByVal myCell As Long) As String
Dim Result As String
Dim myRange, rightRange As Range
Dim myCol_Number As Long
Dim myCol_Address As String
Dim myAdd As String
Set myRange = Cells(myCell, Columns.Count)
If myRange.Value = "" Then
Set rightRange = myRange.End(xlToLeft)
myCol_Number = rightRange.Column '列を数値で示す
myAdd = rightRange.Columns(1).Address(True, False)
Else
myCol_Number = Columns.Count '列を数値で示す
myAdd = myRange.Address(True, False)
End If
myCol_Address = Left(myAdd, InStr(myAdd, "$") - 1) '列を文字で示す
' Result = myCol_Number & vbCrLf & myCol_Address
Result = myCol_Number
エクセルセル右列取得 = Result
End Function

Function エクセルセル表エリア取得(ByVal myCell As String) As String
Dim Result As String
Result = エクセルセル表先頭行取得(myCell) & "," & _
エクセルセル表左列取得(myCell) & "," & _
エクセルセル表末尾行取得(myCell) & "," & _
エクセルセル表右列取得(myCell)
'左上のrow,col,右下のrow,col
エクセルセル表エリア取得 = Result
End Function

Function エクセルセル表サイズ取得(ByVal myCell As String) As String
Dim myRange As Range
Set myRange = Range(myCell).CurrentRegion
'行数,列数
エクセルセル表サイズ取得 = myRange.Rows.Count & "," & myRange.Columns.Count
End Function


・エクセルセル表先頭行取得
 任意のセルを含むデータ領域の先頭行番号を数値で返します。
・エクセルセル表末尾行取得
 任意のセルを含むデータ領域の末尾行番号を数値で返します。
・エクセルセル表左列取得
 任意のセルを含むデータ領域の左端列番号を数値で返します。
・エクセルセル表右列取得
 任意のセルを含むデータ領域の右端列番号を数値で返します。
・エクセルセル先頭行取得
 任意の列で先頭にあるデータの行番号を数値で返します。
・エクセルセル末尾行取得
 任意の列で末尾にあるデータの行番号を数値で返します。
・エクセルセル左列取得
 任意の行で左端にあるデータの列番号を数値で返します。※文字で返すこともできます。
・エクセルセル右列取得
 任意の行で右端にあるデータの列番号を数値で返します。※文字で返すこともできます。
・エクセルセル表エリア取得
 任意のセルを含むデータ領域の左上セルの行番号と列番号と右下セルの行番号と列番号を数値で返します。
・エクセルセル表サイズ取得
 任意のセルを含むデータ領域の行数と列数を数値で返します。

 実際の動作は、サンプルファイルにあるマクロ「Test_All」を実行してみてください。

 これをベースにして、なでしこ2.0のエクセルプラグインをつくっていきます。
 うーん、もうちょっとスマートにできると思うので、実装するときは改良する必要がありますね。
関連記事

この記事に含まれるtag : Excel VBA 

FC2スレッドテーマ : プログラミング (ジャンル : コンピュータ

(記事編集) http://nadesocha.blog.fc2.com/blog-entry-145.html

2012/04/30 | Comment (0) | Trackback (0) | ホーム | ↑ ページ先頭へ ↑ |

Comment

コメント:を投稿する 記事: エクセルでデータの最終行や最右列などを調べる

お気軽にコメント:をぞうぞ。
非公開 (管理人のみ閲覧可能なコメント:) にしたい場合には、ロック にチェックを入れてください。

  任意 : 後から修正や削除ができます。
  非公開コメント:として投稿する。(管理人にのみ公開)

Trackback

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。