出産前後の痔にはご注意!

マクロの初心者です。

Excelで、ActiveCell が行の途中(たとえば B12 など)にある場合、

Selection.End(xlToLeft).Select

を2回続けると B1 に移れますが、途中に空のセルがある場合にはうまくいきません。

どんな場合にも、どの行でも、行頭セル *1 にもっていくにはどう記述したらよいのでしょうか。
教えて下さい。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Cells(x,y)を使います。



Cells(ActiveCell.Row, 1).Select
    • good
    • 0
この回答へのお礼

marbinさん ありがとうございました。
簡単な方を使わせていただき、できあがりました。

お礼日時:2007/11/09 10:56

場合によってはこんなのでも。



Application.Goto Cells(ActiveCell.Row, 1), True
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/09 10:55

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelでセルを次の行の先頭の列に移動させる方法を教えてください。

Excelでセルを次の行の先頭の列に移動させる方法があれば教えてください。
例えば、A1、B1、C1と順に入力し、C1のセルでEnterキーを押すと次の行の先頭列A2に入力セルが移動されるといった場合です。

Aベストアンサー

ツールバーのオプションで 編集のタブ 入力後の移動を 右 に設定しておきます。
入力範囲
仮に A1~C10までを選択して
A1入力 Enter B1入力 Enter C1入力 Enter おすと
A2に移動すると思います。

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

QEXCEL VBA で指定した範囲に入力があるかどうか?

こんばんは!!
EXCEL VBAを使い出して、初日からつまずいてます・・・。
みなさん、アドバイスよろしくお願いします!!

で、早速、質問なんですけど、
指定したセル範囲のいずれかに入力があるか調べたいんですけど、それができるプロパティとかってあるんでしょうか?
地道にセル毎にチェックするしかないいんでしょうか??

たとえば、範囲をA1:H1として、その範囲内のセルに何か入力があったらTrueが返ってくるとか・・・。

もし、知ってる方がいらっしゃたら教えてください!!
よろしくお願いします!!!!!

Aベストアンサー

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてしまうんですが、『WorksheetFunction.』と打てば、候補の関数名が表示されると思います。

下記の fnc入力チェック は入力有無を返すユーザー定義関数です。
書き方の例です。分かりやすくなった?この例は引数に"A1:H1"をセットしています。任意の範囲にするには Selection.Address に変えます。

Sub 入力チェック()
  Dim 入力有無フラグ As Boolean        '入力有無の答え

  入力有無フラグ = fnc入力チェック("A1:H1")  'モジュール内でA1~H1を指定(固定)

  MsgBox 入力有無フラグ            '帰ってきた答えをメッセージボックスで確認
End Sub

'入力有無を返すユーザー定義関数
Function fnc入力チェック(checkAddress As String)
  If WorksheetFunction.CountA(Range(checkAddress)) > 0 Then
    fnc入力チェック = True
  Else
    fnc入力チェック = False
  End If
End Function

>これは、まず範囲を選択して、入力チェック()を呼ぶことなのでしょうか
書いたモジュールは範囲が指定してあります。("A1:H11"は間違いです。質問からすると"A1:H1"です)何もしないで入力チェックを実行します。
モジュールを CountA(Selecton) に変えれば任意の選択範囲がチェックの対象になります。任意の範囲を選択して実行します。
メッセージは確認するためで、IF ・・・・ で入力有無が判定できます。

>ワークシート関数CountAってどうやったら出てくるんですか??
ついApplicationと書いてし...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Qexcelで入力の最終行に移動するには

excelで上から順に入力していきます。次第に行が増えて400行とかなってしまうんですが、それをVBAのコマンドボタンか何かで最終行(次に入力するセル)まで一発で移動できませんか?
大変困っていますのでよろしくお願い致します

Aベストアンサー

こんにちわ。サンプルマクロを作ってみました。次のように操作してみて下さい。

1.データの入力されているブックを開き、CTR+F11キーを押してVBE画面を表示させる。
2.VBAProjectの下にあるThisWokrkbookにカーソルを合わせダブルクリックする。
3.ThisWorkbookのコードエディター(右側の白い部分)が開くので、そこに下記のコードをコピー・ペーストする。

Private Sub Workbook_Open()

Dim myCell As String

myCell = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Address
If myCell = "$A$1" Then
ThisWorkbook.Worksheets(1).Range("A1").Select
Else
ThisWorkbook.Worksheets(1).Range(myCell).Offset(1, 0).Select
End If

End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Dim myCell As String

myCell = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Address
If myCell = "$A$1" Then
ActiveSheet.Range("A1").Select
Else
ActiveSheet.Range(myCell).Offset(1, 0).Select
End If

End Sub

4.VBAProjectの下にあるSheet1にカーソルを合わせダブルクリックする。
5.Sheet1のコードエディター(右側の白い部分)が開くので、そこに下記のコードをコピー・ペーストする。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myRow As Long


If Target.Address = "$A$3" Then
If Target.Value <> "" Then
myRow = Cells(Rows.Count, 1).End(xlUp).Row
If Cells(myRow, 1).End(xlToRight).Column _
= Cells(myRow - 1, Columns.Count).End(xlToLeft).Column Then
Cells(myRow + 1, 1).Select
Else
Cells(myRow, Columns.Count).End(xlToLeft).Offset(0, 1).Select
End If
End If
End If

End Sub

6.ブックを保存終了し、再度そのブックを開く。

あなた様のやられたいことが実現していると思います。

もし、不都合な点がありましたら、遠慮なくお知らせ下さい。私でよろしければ、あなた様のやられたいことが実現できるまで一緒に考えたいと思います。 その際には、表の構成内容とあなた様のやられたいことを順を追って詳しくお知らせ下さい。
お手数をおかけいたしますが、よろしくお願いいたします。

こんにちわ。サンプルマクロを作ってみました。次のように操作してみて下さい。

1.データの入力されているブックを開き、CTR+F11キーを押してVBE画面を表示させる。
2.VBAProjectの下にあるThisWokrkbookにカーソルを合わせダブルクリックする。
3.ThisWorkbookのコードエディター(右側の白い部分)が開くので、そこに下記のコードをコピー・ペーストする。

Private Sub Workbook_Open()

Dim myCell As String

myCell = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp...続きを読む

Qオートフィルタ使用時のマクロによるセルの移動

オートフィルタによって抽出した結果、表示されている行の内容を順々に参照していきたいのですが、
どうすればよいのでしょうか?
簡単なことのような気がするのですが・・・。

ActiveCell.Offset(1, 0).Select
とすると、フィルタによって非表示になっている行にも移動してしまいます。


フィルタによって抽出する項目は複数の列を使用するので、マクロでは抽出条件を設定しません。

以上、お願いしまーす。

Aベストアンサー

#1です。

Set DataRng = Range("A1").CurrentRegion

を次のように変更してみて下さい。

'A列の開始セルから終了セルまで
Set DataRng = Range(Range("A1"), Range("A1").End(xlDown))

QVBA シートのボタン名を変更したい

こんにちは。
Excelのマクロを作成しているのですが、
ユーザーフォームではなく、
シートにあるフォームのボタンの名前を変更したいのです。
どうしたら変更できるのでしょうか。
わかるかたいらっしゃいましたら、教えてください。

よろしくお願いします。

Aベストアンサー

#2です。

> Application.callerで取得するボタン名を
> 変更したいのです。

了解です。
ボタンを選択します。そうすると、左上の「名前ボックス」に「ボタン1」とか表示されますね?
そこで名前ボックスの中を変更し、Enterキーです。

QEXCEL あるセルに数字が入力されれば既存マクロ実行させたい

ボタン等のグラフィックオブジェクトのマクロ実行は簡単なのですが、
ある位置のセルにデーターが入力されれば、
既存のマクロを自動実行させることできますか?

Aベストアンサー

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
if Range(ある位置) <>"" then call 既存のマクロ名
End Sub

ある位置と既存のマクロ名を変更して使ってみてください。
あと このVBAは 操作するワークシートのほうに記述します。

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング