シートの削除はDeleteメソッド シートを削除するにはWorksheetオブジェクトのDeleteメソッドを使います。次のコードはアクティブシートを削除します。 Sub Sample04() Activesheet.Delete End Sub 実に簡単です。ところが厄介なことに、データを入力したシートを削除しようとすると「本当に削除してもいいの?戻せないよ?いいの?」と念を押されます。手作業でしたら[削除]ボタンをクリックすればいいのですが、マクロで一連の処理を行うとき、いちいちこのメッセージで止まっては困ります。このメッセージを出さないで削除する方法はないのでしょうか。 もちろんあります。Excelでは多くの確認メッセージが表示されます。この確認メッセージを全て出さなくするには、ApplicationオブジェクトのDisplayAlertsプロパティにFalseを設定します。次のコー
Sub Search() Dim lngYLine As Long Dim intXLine As Integer Dim Obj As Object Set Obj = Worksheets("Sheet1").Cells.Find("りんご") If Obj Is Nothing Then MsgBox "りんごは見つかりませんでした。" Else lngYLine = Worksheets("Sheet1").Cells.Find("りんご").Row intXLine = Worksheets("Sheet1").Cells.Find("りんご").Column MsgBox "りんごは、" + CStr(lngYLine) + "行目の" _ + CStr(intXLine) + "列目にあります" End If End Sub Sub Search() Dim lngYLine
お世話になります。 首記の件で困っております。 特に不具合なく動いているのですが、 あまりにも動作が遅い。。。 VBAは普段がりがりやっているのではないのですが、 今回の処理は約30万レコード分の処理があるのでどうしても VBAでないときついと思いチャレンジしています。 やりたいことは、A列にある値がR列の限られたエリアにいくつ存在するか、 というチェック作業です。 コードを記載しますので、 どなたかやさしい突っ込みお願いしますw Sub CntIf() For myRow = 2 To 300000 Cells(myRow, 19) = WorksheetFunction.CountIf(Range("Q2:Q300000"), Cells(myRow, 1)) cntRec = cntRec + 1 Application.StatusBar = "処理実行中....(現在 " & c
◆実行時間を表示する いろいろなマクロを作り始めた頃は、CPU のスピードが遅くて、 ちょっとしたマクロでも、1分~2分はかかっていました。 重たいマクロを走らせると10分以上はざらで、その頃に挿入していた 実行時間を表示するルーチンです。 少しでも早く動作させるためにはどうすれば良いかも気になるところです。 Dim StartTime, StopTime As Variant 'ここから実行時間のカウントを開始します StartTime = Time ' ' 仕事をさせたいマクロ ' StopTime = Time StopTime = StopTime - StartTime MsgBox "所要時間は" & Minute(StopTime) & "分" & _ Second(StopTime) & "秒 でした"
マクロ開発者にとってエラーは嫌なものです。できればエラーメッセージは見たくありませんし、対処のしかたに慣れていないと、エラーの原因を解明するために思わぬ時間が必要だったりもします。もちろんエラーは発生させないのが一番ですが、そうも言っていられません。ここでは、エラーを回避するテクニックをご紹介します。 エラーを無視する たとえば次のコードは、ワークシート名を取得して表示します。 Sub Sample1() Dim i As Long, buf As String For i = 1 To 4 buf = buf & Worksheets(i).Name & vbCrLf Next i MsgBox buf End Sub しかし、For Nextの繰り返しを4回実行しているため、ワークシートが3枚以下だとエラーになります。 For Nextのループ中でエラーが発生してマクロはストップします
クレジットカード現金化の高還元率の優良店を選ぶためには クレジットカード現金化の優良店を選ぶポイントは、換金率やスピードもありますが、そのほかにも見ておきたいポイントもあります。 お金に厳しい人が利用しますので、手数料やキャンペーンの有無、価格交渉ができる業者ということは見ておきたいところです。 それぞれどのような内容なのでしょうか。 手数料が無料であるクレジットカード現金化の業者には、手数料をすべて無料でしてくれるところがあります。 業者によっては、単純に手数料という名目で業者側の利益がとられていたり、振込手数料、事務手数料という名目で少額ながらお金がかかることがあります。 せっかく高い換金率が記載されていても、手数料の分が差し引かれることで、損をしたような気持ちになったり後から気づくこともあります。 これらの手数料は最初から公式ホームページに記載がある場合は了承したうえで申し込みもでき
ツイート 特定の文字列をセル範囲から検索するにはFindメソッドを使用します。 Findメソッドが検索結果として返すセルを対象に、さまざまなことを行うことが出来ます。 たとえば、検索結果のセルの背景色を変えたり、セル内の検索文字列のフォントを操作したり、隣合うセルを結合するなど、セルの操作で可能なことをFindメソッドの検索結果に対して行うことが出来ます。 ここではFind/FindNextメソッドを組あわせた応用例をご紹介します。 ■検索結果のセルに含まれる検索文字列のフォントを操作する 次のサンプルは、ダイアログボックスで指定した文字列を検索し、セル内にある検索文字列のみ赤・太字に設定します。 ●サンプル1● Sub PaintTargetCharacter() Dim Target As String Dim FoundCell As Range, SearchArea As Ran
ツイート ブックの中の全てのシート名を取得して、セルまたは配列に格納します。 サンプル1はFor Each...Nextステートメントを使って、ブックの中の全てのワークシート名をセルに書き出します。 ●サンプル1● Sub Sample1() Dim mySheet As Worksheet Dim myRow As Long myRow = 1 For Each mySheet In Worksheets '---(1) Sheets("Sheet1").Cells(myRow, 1).Value = mySheet.Name myRow = myRow + 1 Next End Sub ワークシートだけでなく全てのシートを対象にするには、Sheetsコレクションを使用します。(1)の「Worksheets」を「Sheets」に変更すると、グラフシートも含めた全てのシート名を書き出します
このコンテンツは、かなり昔に書きました。正確な時期は覚えていませんが、ワークシートの大きさが65,536行より小さいブックに関して触れていましたので、おそらく1998年前後に書いたのではないかと。22年前かぁ…w 内容もちょっとアレですし、書き足したいこともありますので、全面的に書き直します。ちなみに今は、2020年9月です。 なお、本稿と"ほぼ"同じ内容をYouTubeの動画で公開しています。本稿とは違い、100個のブックから読み込んで所要時間を計測していますので、興味のある方はご覧ください。本稿は、1つのブックから読み込むという基本的な方法と、動画では伝えきれなかった"制約"に関して詳しく解説します。 Excel 4.0マクロで読み込む 原則としてExcelのVBAは、Excel上に読み込んだブックを扱います。Excel上に開いていないブックは、原則として操作できません。この原則は、し
'現在アクティブなシートを"Sheet2"の後ろにコピーする Sub CopyWorksheet() ActiveSheet.Copy After:=Worksheets("Sheet2") End Sub '"Sheet1"を"Sheet2"の後ろにコピーする Sub CopyWorksheet() Worksheets("Sheet1").Copy After:=Worksheets("Sheet2") End Sub '現在アクティブなシートを"Sheet2"の前にコピーする Sub CopyWorksheet() ActiveSheet.Copy Before:=Worksheets("Sheet2") End Sub '"Sheet2"を"Sheet1"の前にコピーする Sub CopyWorksheet() Worksheets("Sheet2").Copy Before:=W
前の例では、配列変数を別の配列に割り当てました。この例に基づいて、次のように配列を返すプロシージャを呼び出し、その配列を別の配列に割り当てることが可能です。 Dim astr1() As String astr1 = ReturnArray 配列を返すには、プロシージャに配列と同じデータ型、またはバリアント型 (Variant) の戻り値が必要です。プロシージャを宣言して指定のデータ型の配列を返す方法には、配列が返されたことを確認するために IsArray 関数を使用する必要がないという利点があります。プロシージャがバリアント型の値を返した場合、配列に対する操作を開始する前に内容を確認することをお勧めします。 ReturnArray プロシージャはユーザーによる入力を要求し、結果値の配列を適切な長さで作成します。このプロシージャで配列を返すためには、目的の配列をこのプロシージャ名に割り当て
あるフォルダの中に保存されているファイルの一覧を取得するにはどうしたらいいでしょう。 真っ先に思いつくのは、Dir関数とDo Loopステートメントを使う方法です。 ここでは、C:\Workフォルダに、複数のファイルが存在するものとします。 取得したファイルの一覧は、アクティブシートのA列に書き出します。 Sub Sample1() Dim i As Long, buf As String Const Path As String = "C:\Work\" buf = Dir(Path & "*.*") Do While buf <> "" i = i + 1 Cells(i, 1) = buf buf = Dir() Loop msgbox "全部で" & i & "個ファイルがありました" End Sub これは、それほど難しくありませんね。 今回は、FileSystemObjectを
Excel 2007 マクロ 別ブックのシートをコピーする方法 別ブックのシートをコピーして アクティブなブックのシートにコピーしたいと思います。 下記マクロを作成しました。 貼り付ける際に、クリップボードに保存するかどうか 聞かれるメッセージが表示されてうまくいきません。 またもっとシンプルな書き方があればアドバイスお願いします。 Sub 取り込み() Dim wb As Workbook Set wb = Workbooks.Open("\") Sheets("Sheet1").Select Cells.Select Selection.Copy ThisWorkbook.Activate ThisWorkbook.Sheets("特定").Select ActiveSheet.Cells(1, 1).Select ActiveSheet.Paste wb.Close End Sub
'アクティブなシートのセルB1~D3の範囲を全てクリア Sub ClearCell() Range(Cells(1,2),Cells(3,4)).Clear End Sub 'アクティブなシートのセルB1~D3の範囲の数式、文字列をクリア Sub ClearCell() Range("B1:D3").ClearContents End Sub 'アクティブなシートのセル全範囲をクリア Sub ClearCell() Cells.Clear End Sub 'Sheet1のセルB1~D3の範囲をクリア Sub ClearCell() Worksheets("Sheet1").Activate Worksheets("Sheet1").Range(Cells(1,2),Cells(3,4)).Clear End Sub 'Sheet1のセルB1~D3の範囲の書式をクリア Sub ClearCe
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く