つらつら Excel VBA

私の備忘録です。

Excel

ブラウザ操作(Chrome、SeleniumBasic)

GoogleChromeを操作したい。SeleniumBasicが必要とのこと。 事前準備は割愛。 マクロ側からページ内にアクセスする時はロード待ち処理を必ず入れる。 IEで出来てた全選択コピー貼り付けがうまくいかず、、、諦めてデータは直接取得。 Dim driver As Selenium…

VBAでワークシート関数を使う(CountA)

A~H列が全て空白の行を見つける処理。 iRow = 2 Do While Application.WorksheetFunction.CountA(Range("A" & iRow & ":H" & iRow)) > 0 '何か処理を入れる iRow = iRow + 1 Loop ワークシート関数CountAは空白ではないセルの個数を返す。以上。

余白設定

'余白設定 With ThisWorkbook.Worksheets("Sheet1").PageSetup .LeftMargin = Application.CentimetersToPoints(1.8) .RightMargin = Application.CentimetersToPoints(1.8) .TopMargin = Application.CentimetersToPoints(1.9) .BottomMargin = Application…

Trimとデータ型について

セル内の文字の前後に空白があると、セル編集で中身を見てみないことには分からず気づきにくい。 そんな時は文字の前後にある空白を除去してくれるTrim便利。Trim(引数)、戻り値はString前後の空白は全て敵!何も考えずこんな感じの脳筋プログラムを作りまし…

行番号と列番号の表示が変

エクセルファイルをスプレッドシートで違和感なく使いたくて色々試していたところ、スプレッドシートで保存したファイルをエクセルで開くと、行番号と列番号が太字になってしまった!番号が見切れる事も! 他の人からもらったファイルを開くと同じような事が…

オートフィルタ解除後にも絞り込み状態を継続させたい

非表示行を覚えておいて、復元させるだけです。 (オートフィルタを解除しなければいいだけの話では・・・?) Sub オートフィルタで絞り込んで解除して非表示状態を復元する処理() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("エクセルシート")…

Excelとスプレッドシートのタイムゾーンを無理やり合わせる

Excelファイルをスプレッドシートで開くと、=Today()の結果が違う! ExcelはOSからタイムゾーンを取得、スプレッドシートはタイムゾーンを各ファイルで設定できるから。 PacificからTokyoに変更して解決!Excelファイルを更新したのでGoogleドライブに上書き…

PDFからコピペ2

コピペしたら文字化け!Wordで開いても文字化け! 1.Googleドライブにログイン 2.PDFをアップロード 3.アプリGoogleドキュメントで開く 4.\(^o^)/ 5.変な空白あるやん!置換置換! 以上

オートフィルタ使用時のセル位置復元

オートフィルタの絞り込み条件を解除するとセル位置がどこいった状態になるのを対策。 保存するか確認されるのは嫌なので回避する処理も入れてみた。かなり快適。 Sub オートフィルタリセット処理() On Error Resume Next '本処理だけが更新内容なら保存しな…

フォントをMSPゴシックに一括変更

同一フォルダのエクセルファイル全部に対してフォントを変える処理。 行列番号部分はスタイルで指定されている模様。この処理だけでは無理。 Sub ゴシック統一() Dim buf As String, folderPath As String Dim ws As Worksheet, wb As Workbook folderPath =…

PDFからコピペ1

WordにコピペしてExcelにコピペする! またはExcelかWordでPDFを開く! 結構Wordで開ける。それでもダメなら他の方法を探るべし 以上

Word文書の置換(Excel)

とりま最近つくったやつ。 エクセル側からワード文書内で検索と置換をするだけのものです。 どうやら改行を含む文字の場合は何かしら手を打たないといけない模様。 使う場合は参照設定をしましょう。(Microsoft Wordなんたら) Sub chikan() Dim path As St…

セル範囲を図として貼り付け

印刷時に便利かも With Sheets("Sheet1") .Range("A2:C6").Copy .Pictures.Paste .Pictures.Paste Link:=True End With 普通のコピペ処理でもできました コピー元を変更すると、link指定した図に反映する! リンクってそういう意味なのか? 以上

罫線

とりま最近使った総勘定元帳から抜粋 With newSheet .Range("A2:H10").Borders.LineStyle = xlContinuous '実線 .Range("A3:H10").Borders(xlInsideHorizontal).Weight = xlHairline '極細 .Range("B2:C10").Borders(xlEdgeLeft).LineStyle = xlDouble '二重…

勘定科目順にエクセルシートを並び変えする処理

確定申告の時に適当に作りました。動けばヨシ!勘定科目ってカテゴリーさえ合ってれば名前は自由に決められるようで、並ばせるの無理じゃね?ということで、用意したリストの通りに強制的に並ばせる処理をします。該当しないものはスキップし、自動的に最後…

ページ設定

とりま最近使ったヤツ With ThisWorkbook.Worksheets(1).PageSetup .PrintTitleRows = "$1:$2" 'タイトル行 .CenterFooter = "&P / &N" 'ページ番号 .Zoom = 80 '拡大率 End With 以上

Excelのショートカットキー

滅茶苦茶よく使う [Ctrl] + [D] 真上のセルを現在セルにコピペ

新規ブックのシート枚数を指定する

Excel2013から2019にしたら新規シートが1枚になってて驚いた。 '新規ブックのデフォルトシート枚数を1に変更してすぐ戻す Dim newWb As Workbook Dim sinw As Integer sinw = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set newW…

オートフィルタの絞り込み結果件数取得

ws.Range("A2").AutoFilter Field:=2, Criteria1:="ピカちゅう" If WorksheetFunction.Subtotal(3, Range("C:C")) = 1 Then '結果が0件の場合の処理。 End If この処理は、オートフィルタを実施して、C列をCOUNTAした結果、タイトル行の1件しか無かった=フ…

複数条件付きMAX(古)

新めのExcelにはmaxifsという便利な関数があるので、そちらを使いましょう。古めのExcelのやり方を書きます。 こんな感じ。配列数式なのでShift+Ctrl+Enterで確定。 データ例が少なくてMAXの意味が無い・・・分かればヨシ! 以上。

配列数式

単純な表です。この計算式を配列数式にしてみませう。 E2:E8を範囲選択して上記表の数式を消してしまいましょう。書き換えます。 範囲選択(E2:E8)した状態で以下の数式を入れます。そんで、Shift+Ctrl+Enterで確定させます。普通にEnterで確定すると失敗で…

INDEXとMATCH便利

以下の表では、最大単価をつけたヤツの担当名と果物名を出してます。 =INDEX(A2:C22,MATCH(MAX(C2:C22),C2:C22,0),2) これで鈴木を出せます。末尾の2を1に変えればぶどうも出ます。 MAXで最大値の850を検出して、MATCHで850はどこにあるかを探して行を返し、…

ランダムパスワード生成

'パスワードに使う半角英数字と記号を指定 '各文字セットから必ず1文字が使われる Const PASS_CHAR_1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Const PASS_CHAR_2 = "abcdefghijklmnopqrstuvwxyz" Const PASS_CHAR_3 = "0123456789" Const PASS_CHAR_4 = "!@#$%^&*_+…

BOM有無UTF-8テキストファイルの読み書き

「Option Explicit」マジ大事。適当に書いても動くからVBA厄介デスヨネー。 UTF-8はBOM有で、UTF-8NはBOM無し。 本題。UTF-8はADODBを使って入出力します。FSOもついでに載せときます。 Option Explicit Public Sub テキストファイルUTF8読み込み(strFilePat…

テキスト一括出力タブ区切り

Sub テキストファイルタブ区切り一括出力() Dim buf As String '1行 Dim delimiter As String '区切り文字 Dim row As Range, clm As Range Dim ws As Worksheet Dim outputTxt As String '全データ Dim outputFilePath As String '出力パス Dim fileNo As I…

テキスト出力タブ区切り(簡易)

Sub テキストファイル出力タブ区切り() Sheets(1).Copy '新しいブックが作成される Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\temp\test.txt", FileFormat:=xlText ActiveWorkbook.Close 'SaveChanges:=False Application.Dis…

ハイパーリンクを削除して保存を繰り返す

Sub ハイパーリンクを削除して保存する処理() Dim targetWb As Workbook, targetWsh As Worksheet Dim strFolderPath As String strFolderPath = ThisWorkbook.Path & "\指定フォルダ\" '画面の更新を停止して処理を高速化 Application.ScreenUpdating = Fal…

オートフィルタで重複データを抽出

Sub Macro1() ' 重複データに色をつける条件付き書式 Range("B:B").Select Range("B:B").FormatConditions.Delete Selection.FormatConditions.AddUniqueValues '条件付き書式の追加 Selection.FormatConditions(1).DupeUnique = xlDuplicate '重複 Selectio…

エクセルシートを個別にブック保存する連続処理

大量のシートを抱えたブックの全シートを、別々のブックにしたかった。 シート1枚目を残し、シート名をファイル名としてブック保存するだけ。 Sub ブック吐き出し() Dim strSaveFileName As String, strSavePath As String strSavePath = ThisWorkbook.Path …

ブラウザIEを開いてエクセルにコピペする処理

Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) '処理待機Sleep用 'IE上で全て選択とコピーを行ない、Excelの新規シートに貼り付ける Function getHTML(strSheetName As String, strUrl As String) As Boolean getHTML = True Dim objIE As O…