- ベストアンサー
任意のセル選択範囲内のセルの名前のコレクション
任意に選択したセル範囲内のセルの名前のコレクションを取得したいと考えています。 On Error Resume Next For Each 名前 In Selection 処理内容 Next On Error GoTo 0 と、すると取得することは可能なんですが、全てのセルを検索するため範囲が大きいと時間が掛かります。 Namesコレクションを利用して、セルアドレスがセル範囲に入っているか?を調べる方法も考えたのですが、これまた時間が掛かります。 どなたか?詳しい方!こんな方法もあるよ!!っての教えて頂けないでしょうか?宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- VBAでセル範囲の「名前の定義」の有無を取得
エクセルのセル範囲(結合セル)にいろいろな名前を定義してあります。 名前の定義されたセル範囲を変更した場合、マクロが動くようにしたいのです。 ところが、名前の定義のないセルを変更すると 「実行時エラー1004、アプリケーション定義またはオブジェクトの定義のエラーです」 になってしまいます。 一応、下記のような方法で解決はできましたが、エラーで判断するのではなく、名前の定義の有無を取得して分岐させるのが正しい?やりかたなのではと思います。 ご教示いただけましたら幸いです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim x As String On Error Resume Next x = Target.Cells(1).Name.Name On Error GoTo 0 If x = "" Then Exit Sub Select Case Target.Cells(1).Name.Name Case "住所" Range("送付先住所").Value = Target.Value Case "氏名" Range("送付先氏名").Value = Target.Value End Select End Sub
- ベストアンサー
- その他MS Office製品
- アクティブセルと同列の最下段セル選択
セルの範囲選択のやり方で悩んでいます。 アクティブになっているセルから、それと同列に有る文字・数値が入力された最下段のセルまでを範囲指定したいのです。 その際にセルは結合されている場合と、そうでない場合があります。 取得したセルアドレスは他にも使用したいので、出来る事ならアクティブセルと最下段のセルアドレスを別々に取得してから、その値を使って範囲指定できるようにしたいです。 宜しくお願い致します。
- ベストアンサー
- Visual Basic
- 選択範囲だけを相対値セルに変換
選択範囲だけを相対値セルに変換 Sub test() Dim c For Each c In Selection If c.HasFormula Then c.Formula = Application.ConvertFormula(Formula:=c.Formula, _ FromReferenceStyle:=xlA1, ToAbsolute:=xlRelative) End If Next End Sub セル行が変化してうまく動作しません どこを直せばよいのかわかりませんどなたかお教えください。
- ベストアンサー
- その他(インターネット・Webサービス)
- セルの値をシート名にするエクセルVBA
件名のVBAを以下のように書きました B列の4からずっと下までのセルの値を次々とシート「ひな型」をコピーし増やしていくものです。 Sub テスト() ' ' Macro ' ' Dim target As Range Dim h As Range '見えてるセルを取得する。「全部隠れていた」場合も考える。 On Error Resume Next Set target = Worksheets("Sheet1").Range("B4:B" & Worksheets("Sheet1").Range("B65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible) If target Is Nothing Then Exit Sub 'シートを増やしていく For Each h In target On Error GoTo errhandle Worksheets(CStr(h.Value)).Select On Error GoTo 0 Next Sheets("Sheet1").Select Exit Sub errhandle: Worksheets("ひな型").Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = h.Value Resume End Sub これだと、一応思った通りにはなるのですが B列のセルに複数同じ名前があった時に、既に作ったシートの名前がある場合 それは無視するという風に実行したいです お知恵をお貸しくださいませ
- ベストアンサー
- Excel(エクセル)
- 使用中のセル範囲に空白があるか取得するには?
For Each r In ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks) ’空白セルに対して処理を行なう Next r このようなコードの場合、使用中のセル範囲に空白がないとエラーになるので、 ループに入る前に、空白セルがあるかを取得したいのですが、 どういう方法があるのでしょうか?
- ベストアンサー
- Excel(エクセル)
- EXCEL VBAで空白削除のマクロを作りましたが
削除されません。 下記のとおりですが、どう考えても動きません、どなたか修正をお願いします。 初心者です。宜しくお願いします。 Sub Ksakujyo() Dim ObjRange As Range On Error Resume Next Set ObjRange = Application.InputBox("削除範囲を選択して下さい。", "印刷範囲", Type:=8) On Error GoTo 0 If ObjRange Is Nothing Then MsgBox "キャンセルされました。" End If If Selection.Count = 1 Then Exit Sub On Error Resume Next Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp Exit Sub End Sub
- ベストアンサー
- その他MS Office製品
- 複数の離れた選択範囲をコピーペースト
エクセルでCtrlを押しながら複数の離れたセルを選択しています。 それを指定したセルに縦1列に並べる方法はありますか?(Sheet2のA1から下方向へ並べる) 順番が入れ替わっても問題ありません。 普通に行うと複数の選択範囲に対して実行できません。という警告が出ます。 他の方のよく似た質問の回答でVBAが見つかりましたが、その回答では選択したセルの位置関係をキープしたままの状態で貼り付けされるので、縦1列に並べるように改良して欲しいです? 宜しくお願いします。 Sub sample() On Error Resume Next Set base = Application.InputBox("コピー先セルを入力してください。", Type:=8) If base Is Nothing Then Exit Sub For Each a In Selection If b = "" Then b = a.Row: c = a.Column base.Offset(a.Row - b, a.Column - c) = a.Value Next End Sub
- ベストアンサー
- オフィス系ソフト
- ExcelVBA 選択したセルの取得
こんにちは。ゆきのです。 選択した範囲のセルに対して、Excelのマクロで 1回ずつ処理を行いたいと考えています。 まずセル数を取得したいのですが、 「selection.cells.count」でセル数を取得すると、 同じセルが複数回カウントされます。 またセルの範囲を取得したいのですが、 「selection.address」で範囲を取得すると、 重複したセルを含んだそれぞれの範囲が取得されます。 例えば、 (1) 「$A$1」を「ctl」+「左クリック」で3回選択した状態だと、 「selection.address」が「$A$1,$A$1,$A$1」となり、 「selection.cells.count」は「3」となります。 (2) 「ctl」+「左クリック」で「A1:B1」「A1:A2」を連続で選択した状態だと、 「selection.address」が「$A$1:$B$1,$A$1:$A$2」となり、 「selection.cells.count」は「4」となります。 ($A$1が2回カウントされます) この時、同じセルを複数回カウントせずにセル数を 取得することはにできるのでしょうか? (上の例の場合ですと、(1)が「1」、(2)が「3」と取得したいです。) また、複数選択で範囲を取得する場合に選択が重複したセルを 除いた状態の範囲を取得することはできるのでしょうか? 処理したセルを記憶させるなどの方法は考えてみたのですが、 別の方法はないかと思い、質問させていただきました。 どなたか、教えて頂けませんか?? よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- Excel collectionについて VBA
Dim Mydata As New Collection Dim i As Long Dim EndNumber As Long On Error Resume Next 'データを登録する間、エラーを無視する For i = 2 To EndNumber '2行目から最終行までチェック Mydata.Add Range("J" & i).Value, Range("J" & i).Value 'J列のデータ取得 Next i On Error GoTo 0 i = 1 For Each A In Mydata Worksheets("Sheet1").Range("A" & i).Value = A i = i + 1 Next A 現在見ているシートの重複しない項目を 別シートに書き込みしているプログラムになります。 様々なサイトを参考にさせて頂き、 上記のような結果になり、 文字列は取得できるようになりました。 しかし、もとになるデータがある位置に(例は、J列) 数値が入っていると上手くコレクションに入ってくれません。 J列に文字列(りんご、ごりらなど)が入っている場合は 重複しない項目がコレクションに格納されていきます。 J列に文字列(0,1)が入っていた場合、 重複しない項目もなにも無く、 ローカルのMydataの中には<変数無し>とありました。 このプログラムの何処を直せば、数値をコレクションとして取得できますか? ちなみに、EndNumberには最終行の数値が入っています。 >Mydata.Add Range("J" & i).Value, Range("J" & i).Value 'J列のデータ取得 .valueを.stringにしても効果はありませんでした。 回答よろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- on error 処理に関して
on error goto での処理ルーチン内で、 さらに on error goto を出すことは可能でしょうか。 それとも、一度on errorを設定すると、エラーが発生した後では変更は不可なのでしょうか。 やりたいことは、 1回目と、2回目、3回目以降でやることとを変えたいのです。 例えば、メッセージを変えるとか。 この場合、 エラー処理の中で、何回目かを聞くことで、メッセージを変えることは出来ると思うのですが、 それはやらず、 他にも色々やることが多いので、別処理として飛びたいのです。 以下のようなイメージです。 err1: on error goto err2 resume next err2: on error goto err3 resume next err3: resume next 宜しくお願いします。
- ベストアンサー
- Excel(エクセル)
- 1Passwordの3年版を購入しましたが、無料お試し期間が終了するとアカウントが凍結されて使用できなくなります。
- 再アクティベートするためにはサブスクリプションを再度購入する必要があります。
- 3年版はサブスクリプション代を3年分前払いしていると認識されますが、凍結される問題が発生しています。
補足
いつもいつもいつも適切なご指導有難う御座います。 >Names(名前定義)をVBAで使う方法は避けたほうがよいです。オブジェクトブラウザで調べてみれば分りますが、曖昧な要素をもっているので、いわゆる「明示的」というVBAの前提からは外れてしまいます。 このように、何度も名前についてのご指導は、痛感しております。しかし、ご指導頂いて置きながら、名前に固執しているには理由があります。 本来は、マクロを組む人間が完結したものを作る必要があると思いますが、今やろうとしていることは、エクセルに慣れていない人も名前さえ定義すれば、フレキシブルに拡張できるようなものが出来ないか?と試行錯誤しております。 カード型データ的なものを考えていますので、アクセスとの連携も考えています。 いつも、抽象的な質問にもかかわらす丁寧なご指導有難うございます。