Excel VBA質問箱 IV

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

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


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

【66857】選択範囲の行と列 ひろのり 10/10/13(水) 1:36 質問[未読]
【66859】Re:選択範囲の行と列 通り魔 10/10/13(水) 3:20 回答[未読]
【66928】Re:選択範囲の行と列 ひろのり 10/10/18(月) 0:28 お礼[未読]
【66862】Re:選択範囲の行と列 Jaka 10/10/13(水) 10:54 発言[未読]
【66930】Re:選択範囲の行と列 ひろのり 10/10/18(月) 0:33 お礼[未読]
【66863】Re:選択範囲の行と列 neptune 10/10/13(水) 13:25 発言[未読]
【66929】Re:選択範囲の行と列 ひろのり 10/10/18(月) 0:31 お礼[未読]

【66857】選択範囲の行と列
質問  ひろのり  - 10/10/13(水) 1:36 -

引用なし
パスワード
   こんにちは。ひろのりと申します。

任意に選択したセルの範囲の列番号(先頭と最後)の取得方法につき御教示頂けますでしょうか。

任意に選択したセルの範囲の列の幅を1行置きに自分で設定したいと思っています。

自分なりに、下記(*1)を記述し、問題なく動きました。
しかしながら、そもそも私の実力では無駄のない記述になっていないこと、また、これは選択範囲の中にあるセルの数をベースに導きだしていること、等から、もっと簡単ですっきりした記述方法があるのではないかと思っています。

ウェブ等で調べたのですが、列番号の取得そのものとしては、結果的に(*2)の記述があるのを見つけました。当然ながら、試しましたがきちんと動作します。
ここで、理解を深めたいのですが、7行目に下記が記述されています。

With .Cells(1, 1)

Cells(1, 1)というと、固定でA1セルを示すものだと思っていたのですが、実行上は、きちんと ”Areaとして選択した範囲の左上のセル”と指定していることになると思います(例えばC5:I20なら、C5セル)。

Cellsプロパティとはそういうものなのでしょうか。
このあたりを御教示頂けますとありがたいです。今のままの理解では、今後間違っCellsを使ってしまいそうです。

どうも基本中の基本かと推測され申し訳ないのですが、宜しくお願い致します。

**(1)*******************
Dim i As Integer, S As Integer, E As Integer
   S = Selection(1).Column
   E = Selection(Selection.Count).Column
  For i = S To E - 1 Step 2
 
  Columns(i).Select
  Selection.ColumnWidth = 3 '3ピッチに設定

 Next i

 For i = S + 1 To E Step 2
  Columns(i).Select
  Selection.ColumnWidth = 10 '10ピッチに設定
  
 Next i
*(1)終わり****************************
****(2)*******************************

Sub Sample_RowAndColumn()
  Dim iRow_First As Long
  Dim iRow_Last As Long
  Dim iColumn_First As Long
  Dim iColumn_Last As Long

  '選択範囲の最初の範囲を対象にします
  With Selection.Areas(1)

    '先頭行番号と先頭列番号の取得
    With .Cells(1, 1)
      iRow_First = .Row
      iColumn_First = .Column
    End With

    '最終行番号の取得(先頭行番号 + 選択行数 - 1)
    iRow_Last = iRow_First + .Rows.Count - 1

    '最終列番号の取得(先頭列番号 + 選択列数 - 1)
    iColumn_Last = iColumn_First + .Columns.Count - 1

  End With

  '結果の表示
  MsgBox CStr(iRow_First) & "行" & CStr(iColumn_First) & "列" _
    & " - " & CStr(iRow_Last) & "行" & CStr(iColumn_Last) & "列"

End Sub

**(2)の終わり************************

【66859】Re:選択範囲の行と列
回答  通り魔  - 10/10/13(水) 3:20 -

引用なし
パスワード
   ▼ひろのり さん:

With Selection.Areas(1) の中の With .Cells(1, 1) なので
Selection.Areas(1).Cells(1, 1) となり
選択された範囲の左上になると思われます。

【66862】Re:選択範囲の行と列
発言  Jaka  - 10/10/13(水) 10:54 -

引用なし
パスワード
   参考
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=240;id=FAQ

全体範囲の右下のセルは、上記コードの最後に下を追加。
MsgBox Range(Rgst).Cells(Range(Rgst).Cells.Count).Address

【66863】Re:選択範囲の行と列
発言  neptune  - 10/10/13(水) 13:25 -

引用なし
パスワード
   ▼ひろのり さん:
疑問への具体的な回答は出ているようですので根本的な方を書いときます。

>今のままの理解では、今後間違っCellsを使ってしまいそうです。
そう思った場合、先ず、Helpを精読しましょう。それが一番早いし間違いないです。

以下2007Helpより引用
----------------------------------------------------
Cells プロパティ

Range オブジェクトでは、指定された範囲のセルを表す Range オブジェクトを返します。
DataSheet オブジェクトでは、現在使用中のセルだけでなく、データシートのすべてのセルを表す
Range オブジェクトを返します。値の取得のみ可能です。

expression.Cells

expression  必ず指定します。対象となるオブジェクトへの参照を返すオブジェクト式を指定します。

---------------------------------
Application.Cells プロパティ
アクティブ シートがワークシートのとき、そのワークシートにあるすべての
セル (Range オブジェクト) を返します。アクティブ シートがワークシートで
ないとき、このプロパティは失敗します。値の取得のみ可能です。
構文
式.Cells

式  Application オブジェクトを表す変数。

-----------------------------------
Range.Cells プロパティ
指定した範囲のセルを表す Range オブジェクトを返します。
構文
式.Cells

式  Range オブジェクトを表す変数です。

-----------------------------------
Worksheet.Cells プロパティ
ワークシートのすべてのセル (現在使用されていないセルも含む) を表す
Range オブジェクトを返します。
構文
式.Cells

式  Worksheet オブジェクトを表す変数です。

-------------------------------------

※皆さんこれを知らずに使ったりよく忘れているようです。
Application オブジェクト
Excel アプリケーション全体を表します。
アクティブ セル (ActiveCell プロパティ) など、画面上で扱う一般的な
オブジェクトを取得するためのプロパティとメソッドのほとんどは、
対象となるオブジェクトとして Application オブジェクト修飾子を指定しない
で使用できます。

後はrangeオブジェクトのプロパティやメソッドを一通りざっと目を通すと
良いと思います。
(全部は覚えられませんからこんなものが有った程度で充分です)

【66928】Re:選択範囲の行と列
お礼  ひろのり  - 10/10/18(月) 0:28 -

引用なし
パスワード
   ▼通り魔 さん:

こんにちは。
お礼遅くなり申し訳ございません。

どうも有難うございました。


>▼ひろのり さん:
>
>With Selection.Areas(1) の中の With .Cells(1, 1) なので
>Selection.Areas(1).Cells(1, 1) となり
>選択された範囲の左上になると思われます。

【66929】Re:選択範囲の行と列
お礼  ひろのり  - 10/10/18(月) 0:31 -

引用なし
パスワード
   ▼neptune さん:

お礼が遅くなり申し訳ございません。

また、御丁寧に御教示ありがとうございます。

今後、Helpを見る癖をつけるようにします。

ありがとうございました。

>▼ひろのり さん:
>疑問への具体的な回答は出ているようですので根本的な方を書いときます。
>
>>今のままの理解では、今後間違っCellsを使ってしまいそうです。
>そう思った場合、先ず、Helpを精読しましょう。それが一番早いし間違いないです。
>
>以下2007Helpより引用
>----------------------------------------------------
>Cells プロパティ
>
>Range オブジェクトでは、指定された範囲のセルを表す Range オブジェクトを返します。
>DataSheet オブジェクトでは、現在使用中のセルだけでなく、データシートのすべてのセルを表す
> Range オブジェクトを返します。値の取得のみ可能です。
>
>expression.Cells
>
>expression  必ず指定します。対象となるオブジェクトへの参照を返すオブジェクト式を指定します。
>
>---------------------------------
>Application.Cells プロパティ
>アクティブ シートがワークシートのとき、そのワークシートにあるすべての
>セル (Range オブジェクト) を返します。アクティブ シートがワークシートで
>ないとき、このプロパティは失敗します。値の取得のみ可能です。
>構文
>式.Cells
>
>式  Application オブジェクトを表す変数。
>
>-----------------------------------
>Range.Cells プロパティ
>指定した範囲のセルを表す Range オブジェクトを返します。
>構文
>式.Cells
>
>式  Range オブジェクトを表す変数です。
>
>-----------------------------------
>Worksheet.Cells プロパティ
>ワークシートのすべてのセル (現在使用されていないセルも含む) を表す
>Range オブジェクトを返します。
>構文
>式.Cells
>
>式  Worksheet オブジェクトを表す変数です。
>
>-------------------------------------
>
>※皆さんこれを知らずに使ったりよく忘れているようです。
>Application オブジェクト
>Excel アプリケーション全体を表します。
>アクティブ セル (ActiveCell プロパティ) など、画面上で扱う一般的な
>オブジェクトを取得するためのプロパティとメソッドのほとんどは、
>対象となるオブジェクトとして Application オブジェクト修飾子を指定しない
>で使用できます。
>
>後はrangeオブジェクトのプロパティやメソッドを一通りざっと目を通すと
>良いと思います。
>(全部は覚えられませんからこんなものが有った程度で充分です)

【66930】Re:選択範囲の行と列
お礼  ひろのり  - 10/10/18(月) 0:33 -

引用なし
パスワード
   ▼Jaka さん:

どうもありがとうございました。
お礼遅くなり申し訳ございません。

下記、参考にさせていただきます。

知らないワードが出てきましたので、今から勉強せねば。。。


>参考
>ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=240;id=FAQ
>
>全体範囲の右下のセルは、上記コードの最後に下を追加。
>MsgBox Range(Rgst).Cells(Range(Rgst).Cells.Count).Address

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