管理者 のすべての投稿

Excel:図形(オブジェクト・オートシェイブ)内の文字列を検索する方法

Excelで図形(オブジェクト・オートシェイブ)内の文字列を検索すると通常は以下の様に検索結果にヒットせず「検索対象が見つかりません。…」と表示されます。

今回は「Relax Tools AddIn」というアドインを導入して図形内の文字列を検索可能とする手順を説明します。

アドイン「Relax Tools AddIn」のダウンロード

Excelで図形内の文字列を検索する手順

  1. 「オプション」を選択します。
  2. 「アドイン」⇒「設定」ボタンを選択します。
  3. 「参照」ボタンを選択します。
  4. ダウンロードしたファイル内にある「RelaxTools.xlam」を選択します。
  5. 以下の様に「RelaxTools AddIn」が追加されていることを確認します。
  6. 追加された「RelaxTools」タブの「検索/置換/装飾」⇒「セル・シェイブの正規表現検索」を選択します。
  7. 検索ボックスで検索を実施すると以下の様に図形内の文字列も検索結果として表示されているのが確認出来ます。

📝補足:実際に使ってみて気づいたこと

Excelで図形内の文字を検索できるのは意外と知られていませんが、実務ではかなり便利です。
特に「フローチャート」や「構成図」「業務手順書」など、図形の中にテキストを入れて管理しているファイルでは効果絶大です。

導入時のポイントとしては以下の通りです。

  • アドインの互換性確認:Excelのバージョン(32bit/64bit)に合ったRelax Tools AddInを導入する。

  • マクロのセキュリティ設定:信頼できる発行元であることを確認し、必要に応じて「信頼できる場所」に登録。

  • 大量の図形がある場合:シート全体を対象にすると処理時間がかかるため、範囲を限定して使うと快適。

  • 他の用途への応用:コメントやテキストボックス内の文字もVBAで検索できるので、似た仕組みを応用すればさらに便利。

ちょっとした工夫で作業効率がぐっと上がるので、「図形の中だけ検索できない…」というときに試してみる価値はあります。
今後もExcelアドインやVBA活用の小ネタを紹介していくので、ぜひブックマークしておいてください。

Eclipse:同じ処理内容を一つのメソッドへ抽出(統合)する方法

EclipseではJavaなどで一つのクラス内で同じ処理内容が複数存在している場合、一つのメソッドとして抽出(統合)することが出来ます。この機能は同じ処理内容ではなくても選択したソースコードは別のメソッドとして抽出することも可能となります。

サンプルコード

Javaソース:メソッド抽出前

  • 以下の様に3~7行目と9~13行目は同じ内容なのでこちらを一つのメソッドに抽出します。

メソッド抽出手順

  1. 抽出したいソースコードを範囲選択して右クリック後、「リファクタリング」⇒「メソッドの抽出」を選択します。ショートカットキー「Alt + Shift + M」でもOKです。
  2. メソッドの抽出画面でメソッド名を指定して必要に応じて各チェックボックスを選択して「OK」ボタンを選択します。

Javaソース:メソッド抽出後

  • 以下の様に同じ処理内容が一つのメソッドとして抽出(統合)されているのが確認出来ます。

     

SQL:特定の日付時点で有効な住所情報を取得する方法

顧客の有効住所などを管理しているテーブルからある特定の日付時点で有効な住所を取得する方法をメモしておきます。

特定の日付時点で有効な住所情報を取得するサンプル

サンプルテーブル

  • 「CLIENT_ADDRESS」テーブル
    以下の様に顧客ID(CLIENT_ID)毎に有効な住所を管理するテーブルです。最新の住所のEND_DATEはnullとして管理してます。

クエリー(SQL)

  • ‘2022-03-31’時点で有効な住所情報を取得する例です。

実行結果

Excelの表をWordへ貼り付ける方法

Excelで作成した表やテーブルなどをWordへ貼り付ける場合、単純にコピペでも可能ですが、計算式などの書式は数値としてそのままコピーされるので今ひとつ使い勝手が良くない表になってしまいます。

そういう場合は「形式を選択した貼り付け」でExcel形式のオブジェクトとして貼り付けすることでExcelの計算式などもコピペ出来るので便利です。

Excelの表をWordへ貼り付ける手順

  1. Excelで貼り付けたい表を選択してコピーします。
  2. Wordで「ホーム」タブ ⇒ 「貼り付け」 ⇒ 「形式を選択して貼り付け」 を選択します。
  3. 「Microsoft Excel ワークシート オブジェクト」を選択して「OK」ボタンを選択します。
  4. 以下のようにExcelの表のまま貼り付けられているのが確認できます。
  5. 貼り付けた表をダブルクリックするとExcelベースでのフィルタやグループ化なども操作する事が可能となります。

Oracle:プロセス構造の仕組み

Oracle DBのプロセス構造は大きく「ユーザープロセス」、「サーバープロセス」、「バックグラウンドプロセス」があります。

ユーザープロセス

  • クライアントからSQLを発行すると発生するプロセスです。

サーバープロセス

  • クライアントが発行したSQLを処理するするのがメインのプロセスです。

バックグラウンドプロセス

  • サーバープロセスがSQL管理に専念させるため、他のプロセスを監視するためのプロセスです。Oracleインスタンスを起動することで自動で起動します。
  • 主なバッググランドプロセスの種類
    種類説明
    DBWn
    (データベースライター)
    データベースバッファキャッシュ内の変更されたデータをデータファイルへ書き込む
    LGWR
    (ログライター)
    REDOログバッファにあるREDOログをREDOログファイルへ書き込む
    CKPT
    (チェックポイント)
    チェックポイント情報を制御ファイルとデータファイルヘッダーへ書き込む
    SMON
    (システムモニター)
    インスタンスのリカバリを実行する
    PMON
    (プロセスモニター)
    ユーザープロセス障害からリカバリを実施する
    ARCn
    (アーカイバー)
    REDOログファイルのコピー(アーカーブファイル)を作成する
    REDO
    (リカバラ)
    分散トランザクションに関する障害を自動的に解決する。
    MMON
    (マネージメントモニター)
    メモリー内の統計情報をスナップショットとして定期的にデーターベースへ格納する。
    MMAN
    (メモリーマネージャ)
    メモリーを必要な場所に動的に割り当てる

 

SQL:任意の順序でソート(並べ替え)する方法

SQLでは特定の項目の昇順、降順ではなく任意の順序で並べ替えて取得することも出来ます。

任意の順序でソートするにはORDER BY句でCASE文を指定する事で取得することが出来ます。

任意の順でソートする例

サンプルテーブル

「BIRTHDAY」テーブル

クエリー(SQL)

出力結果

Excel:非表示行を含めずに集計(カウント)する方法

Excelで非表示行を含めずに集計したい場合はSUBTOTAL関数を使用すると便利です。

フィルタで絞ったり、グループ化して一部範囲行を非表示にして現在表示されている行のみ集計したい場合などで有用となる関数です。

SUBTOTAL関数の書式

  • =SUBTOTAL(集計方法,参照1,[参照2]…)
  • 第1引数の集計方法には1~11のコード値か101~111のコード値を指定出来ます。3桁のコード値を指定する事で非表示行を含めずに集計することが可能になります。
    Function_num
    (非表示行を含む)
    Function_num
    (非表示行を含めない)
    関数
    1101AVERAGE
    2102COUNT
    3103COUNTA
    4104MAX
    5105MIN
    6106PRODUCT
    7107STDEV.S
    8108STDEV.P
    9109SUM
    10110VAR.S
    11111VAR.P

SUBTOTAL関数の使用例

  • 下記サンプル(テーブル)ではC列は通常のSUM関数、D列をSUBTOTAL関数で集計しています。全ての行を表示している場合はどちらも値は同じとなります。D8セルには「=SUBTOTAL(109,[金額2])」を入力します。
  • グループ化した分類=①の行を非表示にしてみると以下の様に分類=②の行のみの集計値がD列に表示されているのが確認出来ます。
  • 他にもフィルタで商品=Aのみ表示すると商品=Aの集計のみD列に表示されているのが確認出来ます。

 

SQL:xx日後、xxヶ月後、xx年後などの日付を取得する方法

SQLでsysdateなどの日付型へ加算、減算してxx日後、xxヶ月後、xx年後を求める方法をメモしておきます。

xx秒後、xx秒前を求める方法

クエリー(SQL)例

  • システム日付の30秒後と30秒前を取得する例です。

実行結果

 

xx分後、xx分前を求める方法

クエリー(SQL)例

  • システム日付の5分後と5分前を取得する例です。

実行結果

 

xx時間後、xx時間前を求める方法

クエリー(SQL)例

  • システム日付の2時間後と2時間前を取得する例です。

実行結果

 

xx日後、xx日前を求める方法

クエリー(SQL)例

  • システム日付の1日後と1日前を取得する例です。

実行結果

 

xxヶ月後、xxヶ月前を求める方法

クエリー(SQL)例

  • システム日付の1ヶ月後と1ヶ月前を取得する例です。ADD_MONTHS関数は1/31の1ヶ月後は2/28となるように上手く月末日を調整してくれます。

実行結果

 

xx年後、xx年前を求める方法

クエリー(SQL)例

  • システム日付の1年後と1年前を取得する例です。ADD_MONTHS関数に12の倍数を指定することで年単位での加減算が可能となります。

実行結果

 

補足:他データベースでの日付加算と実務での注意点

本記事では Oracle を前提に日付演算を紹介しましたが、他の主要データベースでも「xx日後/xxヶ月後/xx年後」を取得する方法が存在します。移植性や比較の参考として以下に整理します。

DBMS日数加算の例月・年加算の例
OracleSYSDATE + 3ADD_MONTHS(SYSDATE, 1)(1ヶ月後) / ADD_MONTHS(SYSDATE, 12)(1年後)
MySQLDATE_ADD(NOW(), INTERVAL 3 DAY)DATE_ADD(NOW(), INTERVAL 1 MONTH) / INTERVAL 1 YEAR
SQL ServerDATEADD(day, 3, GETDATE())DATEADD(month, 1, GETDATE())
PostgreSQLCURRENT_DATE + INTERVAL '3 day'+ INTERVAL '1 month' / '1 year'

月末日の扱いについて注意

  • Oracle の ADD_MONTHS('2024-01-31', 1)2024-02-29(存在しない日付は月末に補正)

  • MySQLやPostgreSQL でも同様に月末補正される場合があります

  • 契約更新日などで「きっちり同日を基準にしたい」場合は仕様確認が必要です

実務でよくある活用例

  • 支払期限:請求日+30日

  • 契約更新:契約開始日から6ヶ月後/1年後

  • リマインダー:イベント前7日/前1時間

  • 登録日を基準としたステップメール通知

減算にも応用可能

  • ADD_MONTHS(SYSDATE, -1) → 1ヶ月前

  • SYSDATE - 7 → 7日前


📌 上記を踏まえると、「日付加算はDBごとに関数が異なる」「月末や閏年の補正挙動を理解しておく」という点を意識しておくと、より安全なSQL設計につながります。

Oracle:最大プロセス数や最大セッション数を変更する方法

Oracleでのセッションやプロセス数には上限があり、それを超えてしまうとデータベースにアクセス出来ずに予期せぬエラー(ORA-12519)が発生するなどの不具合が発生してしまいます。

Oracleで最大プロセス数や最大セッション数は初期化パラメータを管理しているSPFILEに定義されています。変更前にSPFILEのバックアップを取得しておくのをオススメします。

SPFILEの配置場所

Oracle DB 18cの場合の例です。

  • 配置位置:[ORACLE_HOME]/database/SPFILE[ORACLE_SID].ORA
    (例)C:\ORACLE\WINDOWS.X64_180000_db_home\database\SPFILEORCL.ORA

最大プロセス数、最大セッション数の変更方法

  1. 最初に「V$SYSTEM_PARAMETER」から現在の最大プロセス数と最大セッション数の設定値を確認します。「V$SYSTEM_PARAMETER」はインスタンスに現在有効になっている初期化パラメータ情報を示します。

  2. 次にALETER文でプロセス数の上限を変更します。
  3. SPFILEの変更はOracleを再起動しないと適用されないため、Oracle DBを再起動します。
    詳細は「Oracle Database(Oracleサーバ)の再起動(停止・起動)手順」参照
  4. 再度プロセス数とセッション数を確認すると上限が変更されているのが確認出来ます。セッション数は明示的に変更しなくてもプロセス数の変更に比例して上限が増えます。

補足

なお、今回ご紹介した Oracle Database における「最大プロセス数(PROCESSES)」および「最大セッション数(SESSIONS)」の変更手順については、環境や用途によって最適値が異なります。以下の点にご留意ください。

  • 本番環境では、まずテスト環境で変更を検証したうえで適用することをおすすめします。変更後の再起動により影響が出る可能性があります。

  • PROCESSES の値を単に増やせば良いわけではなく、実際の接続数・負荷・リソース使用量を定期的にモニタリングする必要があります(例:V$SESSION、V$PROCESS、V$RESOURCE_LIMIT など)。

  • セッション数(SESSIONS)は PROCESSES の設定に影響を受けており、一般に「SESSIONS ≒ PROCESSES × 1.1〜1.2」のような目安が用いられますが、具体的には接続方式やアプリケーション構成によって変動します。

  • 多数のプロセスを許容する設定にする際は、サーバーのメモリ・CPU・I/Oリソースに対する影響も併せて考慮する必要があります。負荷のピーク時にはリソース競合が起きやすくなります。

  • 万一、変更前の値に戻す必要が生じた場合は、適用後のログやパフォーマンス指標を保持しておくことで、トラブルシューティングが容易になります。

以上を踏まえ、環境に適した値の設定および運用体制を整えたうえでパラメータ変更を実施して頂ければと思います。安心して運用を続けるための一助となれば幸いです。

Excel:本日の日付を表示する方法

Excelで本日の日付を表示するにはTODAY関数を使用すれば簡単に表示出来ます。

TODAY関数はパソコンの内部時計から現在日付を取得して表示する関数となります。

TODAY関数を使用して本日の日付を表示する例

・以下の例ではB2セルへ「=TODAY()」を入力して本日の日付を表示しています。