-
【C++】クラス定義とメンバ関数の実装(分離/インライン/単一ファイル)
はじめに C++のクラスは、データ(メンバ変数)と操作(メンバ関数)をまとめた「設計図」です。このクラスを実際にプログラムで利用するには、まずクラスを定義し、次にそのメンバ関数の具体的な処理内容を実装する必要があります。 メンバ関数の実装には... -
【C++】クラスの定義とメンバ関数の実装方法を解説
はじめに C++のオブジェクト指向プログラミングの核となるのが「クラス (class)」です。クラスは、関連するデータ(メンバ変数)と、それらを操作するための一連の関数(メンバ関数)を一つにまとめた、独自のデータ型の「設計図」です。 この記事では、C+... -
【C++】クラスを使ったオブジェクト指向入門(じゃんけんゲーム作成)
はじめに プログラミングには、処理の「手順」を重視する「手続き型」と、現実世界の「モノ」に対応させて部品化する「オブジェクト指向」という考え方があります。C++は、後者のオブジェクト指向プログラミング(OOP)を強力にサポートする言語です。 OOP... -
オブジェクト指向プログラミング(OOP)とは?そのメリットを初心者向けに解説
はじめに プログラミングの世界には、「オブジェクト指向プログラミング(Object-Oriented Programming, OOP)」という、特に大規模で複雑なソフトウェアを開発する際に不可欠となる、非常に重要な考え方があります。 C++やJava, Python, C#といった多くの... -
【C言語】手続き型プログラミングで「じゃんけんゲーム」を作成する方法
はじめに プログラミングの考え方には、大きく分けて「手続き型プログラミング」と「オブジェクト指向プログラミング」の2つがあります。C言語は、前者の「手続き型プログラミング言語」の代表例です。 手続き型プログラミングとは、プログラムを**一連の... -
【C++/C言語】関数から構造体のポインタを返す方法とstaticの重要性
はじめに C++やC言語で、関数の中で作成した構造体の情報を、呼び出し元のmain関数などで利用したい場合があります。そのようなとき、関数から**構造体を指すポインタを返す(returnする)**という方法があります。 しかし、これには大きな落とし穴があり... -
【C++/C言語】関数に構造体をポインタで渡す方法(値渡しとの違い)
はじめに C++やC言語で、ある関数の中で構造体のデータを使いたい場合、どのようにして関数にそのデータを渡せばよいでしょうか?一つの方法は構造体全体をコピーして渡す「値渡し」ですが、構造体が大きい場合、コピーのコストが無視できなくなります。 ... -
【C++/C言語】構造体のポインタとアロー演算子(->)の使い方
はじめに C++やC言語で、ポインタを使って構造体のメンバにアクセスするには、どうすればよいのでしょうか? 前回、構造体を指すポインタを宣言し、既存の変数のアドレスを代入する方法を学びました。今回は、そのポインタを通じて、指し示している先の構... -
【C++/C言語】構造体のポインタ入門 | アドレスの取得(&)とメンバへのアクセス
はじめに C++やC言語のパワフルな機能の一つに「ポインタ」があります。ポインタは、変数が格納されているメモリ上のアドレスを保持するための特殊な変数です。 構造体に対しても、このポインタを利用することができます。「構造体を指すポインタ」を宣言... -
【C++/C言語】構造体のメンバに「構造体の配列」を持たせる方法
はじめに C++やC言語の構造体(struct)は、入れ子(ネスト)にすることで複雑なデータ構造を表現できます。その応用として、構造体のメンバとして、別の構造体の「配列」を持つことも可能です。 これにより、「クラス」が「生徒の配列」を持つ、「部署」... -
【C++/C言語】構造体の配列の使い方 | 複数のレコードをまとめて管理する方法
はじめに C++やC言語の構造体(struct)は、関連するデータを一つにまとめるのに便利ですが、その真価は配列と組み合わせることでさらに発揮されます。 「社員」の構造体を定義した後、その構造体をデータ型とする配列を宣言すれば、「全社員のデータ」を... -
【C++/C言語】構造体の全メンバを = で一括コピー(代入)する方法
はじめに C++やC言語の構造体(struct)で、ある変数の内容を、別の変数にそっくりそのままコピーしたい場合があります。メンバを一つずつ destination.id = source.id; のようにコピーしていくことも可能ですが、メンバの数が多いと非常に手間がかかりま... -
【C++/C言語】構造体の入れ子(ネスト)の使い方 | 複雑なデータを構造化する方法
はじめに C++やC言語の構造体(struct)は、関連する変数を一つにまとめる便利な機能ですが、その真価は**入れ子(ネスト)**にすることで、さらに発揮されます。 「会社」という大きな構造体の中に、「社員」という別の構造体を複数持たせる、といったよ... -
【C++/C言語】構造体は「型」と「変数(実体)」の違いを理解しよう
はじめに C++やC言語で構造体(struct)を学び始めると、しばしば「型」と「変数(実体)」の概念で混乱が生じることがあります。struct の定義は、あくまで「こういう部品を組み合わせた、新しいデータ型を作りますよ」という設計図を作る作業にすぎませ... -
【C++/C言語】構造体 (struct) の使い方入門!複数の変数を一つにまとめる方法
はじめに C++やC言語でプログラミングをする際、例えば「商品」の情報を管理するために、productID(商品ID)、productName(商品名)、price(価格)といった、関連性の高い複数の変数を個別に宣言するのは非効率です。 このような、互いに強く関連する複... -
【VBA】ファイルの拡張子に関連付けられたプログラムのパスを取得する方法 (API)
はじめに VBAマクロから特定のファイルを開く際、通常は Shell 関数に直接ファイルパスを渡せば、Windowsが自動的に関連付けられたプログラムで開いてくれます。しかし、「.pdf ファイルを開くプログラムが何であるか(Acrobat Readerなのか、ブラウザなの... -
【VBA】マクロの処理をミリ秒(ms)単位で一時停止する方法 (Sleep API)
はじめに VBAでマクロを実行する際、「処理が速すぎて、何が起きているか目で追えない」「特定の処理の間に、ほんの少しだけウェイト(待ち時間)を入れたい」といった場面があります。 VBAには Application.Wait という待機命令がありますが、これは秒単... -
【VBA】マクロの処理時間をミリ秒(ms)単位で高精度に計測する方法 (GetTickCount API)
はじめに VBAの Timer 関数は、マクロの処理時間を秒単位で手軽に計測できますが、非常に高速に完了する処理のパフォーマンスを比較したい場合、秒単位では差が分からず、より精密な計測が必要になります。 このような高精度な時間計測には、Windows APIの... -
【VBA】ユーザーフォームを最大化・最小化・リサイズ可能にする方法 (Windows API)
はじめに VBAのユーザーフォームは、デフォルトではウィンドウサイズの変更ができず、タイトルバーには「閉じる」ボタンしかありません。しかし、表示するデータ量に応じてユーザーが自由に大きさを変えられたり、一時的に最小化してシートの作業に戻れた... -
【VBA】ユーザーフォームのタイトルバーと「閉じる」ボタンを完全に消去する方法
はじめに VBAのユーザーフォームで、ユーザーにフォーム上のボタン以外の操作を一切させたくない場合、タイトルバー自体(タイトル、アイコン、「閉じる」ボタンを含む全て)を非表示にしたい、という究極のカスタマイズ要求があります。これにより、フォ... -
【VBA】ユーザーフォームの「閉じる」ボタン(×)を無効化する方法 (Windows API)
はじめに VBAのユーザーフォームで、ユーザーに特定のボタン(例: 「登録」や「キャンセル」)からの終了を強制し、右上の「閉じる」ボタン(×ボタン)ではフォームを閉じられないようにしたい、という場合があります。これにより、意図しないタイミングで... -
【VBA】Excelの「閉じる」ボタン(×)を無効化する方法 (Windows API)
はじめに VBAで、ユーザーに特定の操作を強制したい場合や、誤ってExcelを閉じられては困るような処理を実行している際に、「Excelウィンドウ右上の『閉じる』ボタン(×ボタン)を一時的に無効化したい」という、非常に高度な制御が必要になることがありま... -
【VBA】画面の解像度(幅と高さ)を取得する方法 (GetSystemMetrics API)
はじめに VBAでユーザーフォームを作成する際、利用者の画面サイズを考慮して、フォームの表示位置や大きさを最適化したい場合があります。例えば、画面解像度に合わせてフォームを中央に表示したり、ウィンドウが画面からはみ出さないように調整したりす... -
【VBA】ファイルやフォルダを完全に削除せず、ごみ箱に移動する方法 (API)
はじめに VBAでファイルを削除する際、Kill ステートメントや FileSystemObject の .DeleteFile メソッドを使うと、ファイルは完全に削除されてしまい、元に戻すことができません。もし操作を誤ると、重要なデータを失ってしまう危険性があります。 Window... -
【VBA】外部アプリのウィンドウを最前面に表示する方法 (SetForegroundWindow API)
はじめに VBAマクロから Shell 関数で他のアプリケーションを起動したり、既に開いているアプリケーションを操作したりする際、「目的のウィンドウが他のウィンドウの背面に隠れてしまっていて見えない」ということがあります。 このような場合に、指定し... -
【VBA】起動している全てのメモ帳を一度に閉じるマクロ (Windows API)
はじめに VBAマクロの実行中に、複数のメモ帳や電卓のウィンドウが開かれていると、作業の妨げになったり、処理の競合を引き起こしたりすることがあります。このような場合に、「起動している特定のアプリケーション(例: 全てのメモ帳)を、一度に全て閉... -
【VBA】起動した外部アプリが終了するまで待機する方法 (Windows API)
はじめに VBAの Shell 関数で外部のアプリケーションを起動すると、VBAはアプリケーションの起動だけを行って、その終了を待たずに、すぐに次のコードの実行に移ってしまいます。しかし、時には「ユーザーがメモ帳での編集を終えて、ファイルを保存して閉... -
【VBA】アプリケーションの重複起動を防止する方法 (FindWindow API)
はじめに VBAの Shell 関数で外部のアプリケーションを起動する際、何も考えずに実行すると、ボタンを押すたびに新しいウィンドウがどんどん開いてしまいます。これを防ぎ、「もし既に起動していたら、新しくは起動しない」という制御を加えたい場面は非常... -
【VBA】Windows APIの使い方入門!Declareステートメントの書き方を徹底解説
はじめに VBAは非常に高機能な言語ですが、時には「PCのスピーカーから音を鳴らしたい」「特定ウィンドウの情報を取得したい」といった、Excelの標準機能だけでは実現できない、よりOSに近いレベルの操作が必要になることがあります。 このような高度な機... -
【VBA】クイックソートアルゴリズムの実装|配列を高速に並べ替える方法
はじめに VBAで大量のデータを格納した配列を並べ替える際、処理速度は非常に重要な要素になります。数あるソートアルゴ-リズムの中でも、「クイックソート」は、その名の通り、一般的に最も高速なアルゴリズムの一つとして知られています。 クイックソー...