ラベル Excel VBA の投稿を表示しています。 すべての投稿を表示
ラベル Excel VBA の投稿を表示しています。 すべての投稿を表示

2025年2月23日日曜日

エクセルVBAでドーナツ形状を描画するコード

エクセルVBAで多数のセルの塗りつぶしを使ってドーナツ形状を描画するコードは、いくつかの方法で実現できます。ここでは、比較的シンプルな方法と、少し応用的な方法の2つを紹介します。

方法1:単純な塗りつぶしによるドーナツ

この方法は、ドーナツの形状を単純な塗りつぶしで表現するものです。

VBA
Sub DrawDonut()

  Dim centerRow As Long, centerCol As Long
  Dim radiusOuter As Long, radiusInner As Long
  Dim row As Long, col As Long

  ' ドーナツの中心座標と半径を設定
  centerRow = 10
  centerCol = 10
  radiusOuter = 5
  radiusInner = 3

  ' シートの塗りつぶしをクリア
  Cells.Interior.Color = xlNone

  ' 外側の円を塗りつぶす
  For row = centerRow - radiusOuter To centerRow + radiusOuter
    For col = centerCol - radiusOuter To centerCol + radiusOuter
      If (row - centerRow) ^ 2 + (col - centerCol) ^ 2 <= radiusOuter ^ 2 Then
        Cells(row, col).Interior.Color = vbRed ' 色は自由に設定
      End If
    Next col
  Next row

  ' 内側の円を塗りつぶしなしにする
  For row = centerRow - radiusInner To centerRow + radiusInner
    For col = centerCol - radiusInner To centerCol + radiusInner
      If (row - centerRow) ^ 2 + (col - centerCol) ^ 2 <= radiusInner ^ 2 Then
        Cells(row, col).Interior.Color = xlNone
      End If
    Next col
  Next row

End Sub

このコードでは、まずドーナツの中心座標と外側・内側の半径を設定します。次に、シート全体の塗りつぶしをクリアし、外側の円を赤色で塗りつぶします。最後に、内側の円を塗りつぶしなしにすることで、ドーナツ形状を描画します。

方法2:図形(円)の組み合わせによるドーナツ

この方法は、2つの円の図形を組み合わせてドーナツ形状を描画するものです。

VBA
Sub DrawDonutShape()

  Dim centerTop As Double, centerLeft As Double
  Dim radiusOuter As Double, radiusInner As Double

  ' ドーナツの中心座標と半径を設定
  centerTop = 100
  centerLeft = 100
  radiusOuter = 50
  radiusInner = 30

  ' 外側の円を作成
  With ActiveSheet.Shapes.AddShape(msoShapeOval, centerLeft - radiusOuter, centerTop - radiusOuter, radiusOuter * 2, radiusOuter * 2)
    .Fill.ForeColor.RGB = vbRed ' 色は自由に設定
    .Line.Visible = msoFalse ' 枠線を非表示
  End With

  ' 内側の円を作成
  With ActiveSheet.Shapes.AddShape(msoShapeOval, centerLeft - radiusInner, centerTop - radiusInner, radiusInner * 2, radiusInner * 2)
    .Fill.ForeColor.RGB = vbWhite ' 背景色と同じ色に設定
    .Line.Visible = msoFalse ' 枠線を非表示
  End With

End Sub

このコードでは、まずドーナツの中心座標と外側・内側の半径を設定します。次に、外側の円と内側の円の2つの図形を作成し、それぞれの色と枠線を設定することで、ドーナツ形状を描画します。

どちらの方法を選ぶべきか

どちらの方法を選ぶべきかは、どのようなドーナツを描画したいかによって異なります。

  • 方法1 は、単純なドーナツ形状をセル単位で表現するのに適しています。セルの塗りつぶしを利用するため、塗りつぶし色やパターンを細かく設定できます。
  • 方法2 は、図形としてドーナツ形状を表現するのに適しています。図形のサイズや位置を自由に設定でき、拡大・縮小にも対応できます。

その他

  • 上記コードでは、ドーナツの色を赤色に設定していますが、vbRedの部分を他の色に変更することで、ドーナツの色を変更できます。
  • ドーナツのサイズや位置は、コード中の変数を変更することで調整できます。
  • より複雑なドーナツ形状を描画したい場合は、複数の円弧や多角形を組み合わせて表現する方法もあります。

これらの情報を参考に、目的に合った方法でドーナツ形状を描画してみてください。

2025年2月22日土曜日

Excel VBA でデータ入力用フォームを作成するプログラム

Excel VBA でデータ入力用のフォームを作成するプログラムは、以下の手順で作成できます。

1. ユーザーフォームの作成

  1. Excel を開き、「開発」タブの「Visual Basic」をクリックし、VBA エディターを開きます。
  2. VBA エディターで「挿入」→「ユーザーフォーム」を選択し、新しいユーザーフォームを作成します。

2. フォームのデザイン

  1. ユーザーフォームに、テキストボックス、ラベル、コマンドボタンなどのコントロールを配置します。
  2. 各コントロールのプロパティ(名前、キャプション、フォントなど)を設定し、フォームのデザインを整えます。

3. イベントプロシージャの記述

  1. 各コントロールのイベント(例: ボタンのクリック)に対して、実行する処理を記述するイベントプロシージャを作成します。
  2. 例えば、テキストボックスに入力されたデータをセルに転送する処理や、フォームを閉じる処理などを記述します。

4. フォームの表示

  1. 標準モジュールに、ユーザーフォームを表示するためのコードを記述します。
  2. 例えば、UserForm1.Show というコードで、UserForm1 という名前のユーザーフォームを表示できます。

5. プログラムの実行

  1. 標準モジュールに記述したコードを実行するか、ユーザーフォームに配置したボタンをクリックすることで、フォームを表示し、データを入力することができます。

サンプルコード

以下は、簡単なデータ入力フォームのサンプルコードです。

VBA
' ユーザーフォームのコード
Private Sub CommandButton1_Click()

  ' テキストボックスに入力されたデータをセルに転送
  Worksheets("Sheet1").Cells(1, 1).Value = TextBox1.Text
  Worksheets("Sheet1").Cells(2, 1).Value = TextBox2.Text

  ' フォームを閉じる
  Unload Me

End Sub

' 標準モジュールのコード
Sub ShowUserForm()

  ' ユーザーフォームを表示
  UserForm1.Show

End Sub

解説

  • このコードでは、TextBox1 と TextBox2 に入力されたデータを、Sheet1 の A1 セルと A2 セルにそれぞれ転送しています。
  • CommandButton1 をクリックすると、データがセルに転送され、フォームが閉じます。
  • ShowUserForm プロシージャを実行することで、UserForm1 が表示されます。

ポイント

  • コントロールの配置やプロパティの設定は、VBA エディターのツールボックスやプロパティウィンドウで行います。
  • イベントプロシージャは、コントロールをダブルクリックするか、コードウィンドウでイベントを選択することで作成できます。
  • フォームのデザインや機能は、必要に応じてカスタマイズしてください。

その他

  • より複雑なデータ入力フォームを作成する場合は、入力データの検証や、データベースとの連携などの処理を追加する必要があります。
  • VBA の学習には、書籍や Web サイトなどの資料を活用することをおすすめします。

ご不明な点がありましたら、お気軽にご質問ください。