• ベストアンサー

Excel VBAについて。

VBAに詳しい方に質問です。 次の2つのプログラムが何をしているのか詳しく教えて下さい。 Sub Macro1() Sheets("Sheet1").Range("A1").QueryTable.Refresh BackgroundQuery:=False End Sub ------------------------- Function LNK(rng As Range) LNK = rng.Hyperlinks(1).Address End Function

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

マクロ1は、シート1のA1セルに埋め込まれた外部データの更新をしています。 関数LNKは、引数として与えたセルに埋め込まれたハイパーリンクのアドレスを返します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル VBA 表示範囲の簡素化

    よろしくお願いします。 下記構文の簡素化ができないでしょうか。 CommandButtonが30個ほどあります。 ーーーーーーーーーー Private Sub CommandButton1_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("A1:D7") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub ーーーーーーーーーー Private Sub CommandButton2_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("A8:B21") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub ーーーーーーーーーー Private Sub CommandButton3_Click() Dim rng As Range Application.Goto Sheets("基本台紙").Range("A1") Set rng = Range("C8:D21") Rows.Hidden = True rng.EntireRow.Hidden = False Columns.Hidden = True rng.EntireColumn.Hidden = False rng(1).Select Unload Me UserForm1.Show vbModeless End Sub

  • VBA関数の使い方がわからないです

    A1にはハイパーリンクとしてhttp://www.yahoo.co.jp/ が入っていて、標準モジュールで Sub Macro1() MsgBox HyperlinkAddress End Sub Function HyperlinkAddress(target As Range) As String HyperlinkAddress = target.Hyperlinks(1).Address End Function としたら、引数は省略できません。になるのですが、 どうすればいいですか? Sub Macro1() MsgBox Selection.Hyperlinks(1).Address End Sub これと同じような事を、関数を使って表現したいです。

  • VBAマクロ実行時エラーの修正について

    VBA超初心者です。 CSVファイルをインポートし、データ更新すると、下記エラーが起こります。 実行時エラー '-2147021882 (8007000e)' データの消失を防ぐため、空白でないセルをワークシートの外にシフトすることはできません。 Ctrl+Endキーを押して最後の空白でないセルに移動し、そのセルとデータの末尾との間にある すべてのセルを削除またはクリアしてください。その後、セルA1を選択し、ブックを保存して最後の セルをリセットしてください。 (以下にも文章ありますが、一部しか表示されません) この時、「デバック」ボタンを押すと、以下のマクロ表示となります。 Sub データ更新() ’ ’データ更新日報出力Macro ’マクロ記録日:○○○ ユーザ名:○○ ’   ScreenUpdating = False Worksheets("sheet1")Select Range("A2").Select Selection.QueryTable.Refresh BackgroundQuery:=False   Range("A2").Select End Sub Sub ピボットテーブル更新日報印刷()    Sheets("Sheet2").Select Range("B14").Select ActiveSheet.PIvotTables("ピボットテーブル1").RefreshTable ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:True End Sub この構文で、Selection.QueryTable.Refresh BackgroundQuery:=False が  間違っているようなのですが、どうすればいいのか良くわかりません。  どなたか教えていただけないでしょうか?

  • Excel VBA インポートファイル名指定したい

    Excel VBA 初心者です。 スイッチを押すと、テキストファイルのインポートダイアログを開いて、外部データの取り込みをしたいと考えています。 指定セルにインポートを設定+シートにマクロ実行スイッチを配置+マクロの自動記録の記述を参照してマクロを登録し、そのスイッチを押す事で、正常にインポート作業を行なう事ができました。 しかし不明点が2箇所ほどあります。 1.ダイアログを開いたとき、ファイル拡張子を指定したいのですが、どうすれば指定できますか? 2.ダイアログを「キャンセル」で閉じると、「実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラー」と表示されるのですが、解決方法はどうすればいいですか?  ※マクロの自動記録を参照して記述したマクロ処理 Sub Macro1() Sheets("HIN").Select Range("A1").Select ActiveCell.Offset(2, 0).Select Selection.QueryTable.Refresh BackgroundQuery:=False Sheets("Sheet1").Select End Sub 環境:EXCEL2000、VB6.0 以上、宜しく御願い致します。

  • エクセルVBA

    VBAの素人です。 以下のようなVBAを実行しようと、何とか形にしました。 単独のBOOKではうまくいくのですが、同時に他のBOOKを開くと 「インデックスが有効範囲にありません」とエラーになります。 エラー箇所は、With Sheets("Sheet1").Range("B1")部分です。 修正をご教示頂ける方、何卒よろしくお願い致します。 全くVBA無知なのにすみません。 Private Sub Workbook_Open() test01 test02 Application.OnTime Now + TimeValue("00:10:00"), "終了" End Sub Sub 終了() Application.OnTime Now + TimeValue("0:00:02"), "test01", , False ThisWorkbook.Close Savechanges:=False Application.Quit End Sub Sub test01() With Sheets("Sheet1").Range("B1") .Value = Time .NumberFormatLocal = "mm:ss" End With Application.OnTime Now + TimeValue("0:00:02"), "test01" End Sub Sub test02() With Sheets("Sheet1").Range("B2") .Value = Time .NumberFormatLocal = "mm:ss" End With End Sub

  • Excel VBA 実行時エラー'1004':

     どちらの処理がより高速であるのかを調べるため、以下の2つのVBAを試作致しました。 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub  処が、これらのVBAを実際に動作させ様としますと、どちらの場合においても「Microsoft Visual Basic」ダイアログボックスが開いて 「実行時エラー'1004': 'Range'メソッドは失敗しました:'_Global'オブジェクト」 と表示されてしまいます。  さりとて、 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select ActiveSheet.Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub 或いは Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range(Cells(i, 1)).Value = Rnd Next i Range("B1").Select End Sub 等としましても、今度は 「実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。」 となってしまいます。  どの部分がどの様に悪いのでしょうか?  そして、どの様に修正すれば良いのでしょうか?  尚、使用しておりますExcelのバージョンはExcel2010です。

  • accessでexcelのvbaを

    今現在は、 objEXCEL.Range("A2:iv65536").Select objEXCEL.Selection.ClearContents objEXCEL.Range("A1").Select objEXCEL.Selection.QueryTable.Refresh BackgroundQuery:=False まで書き込んでいます。 ここまではうまくいきます。 この後に、CSVに名前を変えて上書き保存するコードを入れたいのですが、どうしてもうまくいきません。 下のようなコードを入れてみました。 objEXCEL.ActiveWorkbook.Close SaveChanges:=True, _ objEXCEL.Filename:=ActiveWorkbook.Path & "test.csv" どのように書き込んでいけばいいのでしょうか? VBAは初心者ですが、よろしくお願い致します。

  • エクセル マクロのいれ方

    エクセルを使って表を作っています。 自分のしたい事をするには、マクロを組まなくてはならないことが分かりました。 私はマクロは使ったことがないので、本来ならちゃんと勉強すべきなんですが、締め切りが迫ってるので、マクロのVBAを調べました。 したいのは、『ロックされているセル以外のデータをクリアにする』ということなんですが、その為には下記のVBA?を入れればいいらしいのです。 Sub UnlockCellClear() Dim Rng As Range For Each Rng In UsedRange   If Rng.Locked = False Then     Rng.Clear     Rng.Locked = False   End If Next End Sub ツール→マクロ→VBA→標準モジュール→Module1を開き、上記のVBAを入れてみましたが出来ませんでした。 そんな簡単なことじゃないんですかね? ど 質問の説明が下手でしたら申し訳ありません。

  • VBA? 色のついた文字のセルを数えたい

    色のついた文字の記載があるセルをカウントしたく 色々調べました。結局VBAで設定する方法にしたのですが 設定しテストをするとどうしてもカウント数が合いません。 全くの初心者の為何が間違っているのか全く分かりません。 どなたか教えて下さい。 VBAも全く知らない者でしたので 調べて以下のものをそのまま貼り付けました。 Function CCount(Rng As Range, idx) Dim R As Range Dim Cnt As Long Application.Volatile For Each R In Rng   If R.Font.ColorIndex = idx Then Cnt = Cnt + 1 Next R CCount = Cnt End Function Function GetIndx(Rng As Range) If Rng.Count > 1 Then   GetIndx = vbNullString   Exit Function End If GetIndx = Rng.Font.ColorIndex End Function 何が間違っているのでしょうか?

  • エクセル VBA の質問です。

    A2~A20までのセルに文字を入力した段階で、それぞれB2~B20に入力日時を入れるVBAを以下のように組んでいます。 しかし、同様の条件を同一シートのE2~E20・F2~F20にも入力・自動表示できるようにしなければならなくなり、困っています。 どのように記述を変えればよいのか、教えていただけたらと思います。 宜しく御願いいたします。 Sub Worksheet_change(ByVal Target As Range) Dim Rng As Range Dim c As Range Set Rng = Range("A2:A20") If Intersect(Target,Rng) Is Nothing Then Exit Sub For Each c In Intersect(Target,Rng) If Not IsEmpty(c) Then c.Offset(, 1).Value = Now Else c.Offset(, 1).ClearContents End If Next Rng.Offset(, 1).EntireColumn.AutoFit End Sub 申し訳ありませんが、何卒、宜しく御願いいたします。

専門家に質問してみよう