器用貧乏の独り言

器用貧乏なおっさんが気の向くままに。

【VBA】10進数を8進数に変換するマクロ

◇前置き

今日の記事も基数変換シリーズです。
今回まで2⇔10進数、16⇔10進数の変換マクロを紹介してきました。

ここまで来たら8⇔10進数もやってしまおう!ということで、10進数を8進数に変換するマクロを紹介します。

◇概要

毎度のことながらこんな感じのExcelを用意します。

B列に10進数を入れて変換ボタンをクリックするとC列に8進数が出力されます。

ソースコード

ソースコードはこんな感じです。

Sub Number_10_to_8()
 
Dim Num10 As Long
Dim i As Integer
Dim count As Integer
   i = 0
   count = 0
   
   For i = 3 To 14
       Num10 = Range("B" & i)
       If Range("B" & i).Value <> "" Then
           Range("C" & i).Value = WorksheetFunction.Dec2Oct(Num10)
           count = count + 1
       End If
   Next
 
   MsgBox count & "件のデータを10進数⇒8進数に変換しました。"
 
End Sub

◇使い方

実際に動かしてみましょう。
まずは適当な値をB列にいれます。

変換ボタンをクリックすると........

無事変換されました!

◇最後に

2進数、16進数と比べると8進数は使用機会の少ない基数かもしれません。

それでも全く使われない訳ではないので、この記事が誰かの役に立ってくれるとうれしいです。

【VBA】16進数を10進数に変換するマクロ

◇前置き

先日、10進数を16進数に変換するマクロを紹介しました。

↓詳しくはこちらから。
wwwmotou.hatenablog.com


例のごとく10進数→16進数のマクロを作ったのなら逆も作っちゃいましょう!
ということで今日は16進数を10進数に変換するマクロを紹介します。

◇概要

いつものようにこんなExcelを用意します。

B列に16進数を入力して変換ボタンをクリックすると、C列に10進数が出力されます。

ソースコード

ソースコードはこんな感じです。

Sub Number_16_to_10()
 
Dim Num16 As Variant
Dim i As Integer
Dim count As Integer
   i = 0
   count = 0
   
   For i = 3 To 14
       Num16 = Range("B" & i)
       If Range("B" & i).Value <> "" Then
           Range("C" & i).Value = WorksheetFunction.Hex2Dec(Num16)
           count = count + 1
       End If
   Next
 
   MsgBox count & "件のデータを16進数⇒10進数に変換しました。"
 
End Sub 

◇使い方

実際に動かしてみましょう。
まずは適当な値をB列に入力します。

変換ボタンをクリックすると........

無事変換出来ました!

◇最後に

今回もワークシート関数を使ったマクロを紹介しました。

計算の面倒くさい基数変換もワークシート関数を使えば、短いコードで簡単に計算できます。

他言語にはないExcelVBAの強みですね。

この記事も誰かの役に立つと嬉しいです。

【VBA】10進数を16進数に変換するマクロ

◇前置き

最近、仕事でPLC(※)を使って演算処理をする機会がありました。

※PLC:プログラマブルロジックコントローラ
↑工場などで生産設備を制御するコンピューター的なものですね。

諸々の事情から演算結果をPLC内では16進数で保持して、外部に出力してから10進数に変換することになりました。

↑この辺の事情を語ると長くなるので詳しいことは割愛します。

そこで基数変換をしてくれるマクロを作るに至りました。

※実物は基数変換以外にも色々と処理していますが、今回は基数変換のみを切り取って紹介します。

◇概要

例のごとく、こんな感じのExcelを作りました。

B列に10進数を入力して変換ボタンをクリックするとC列に16進数が出力されます。

ソースコード

ソースコードはこんな感じです。

Sub Number_10_to_16()
 
Dim Num10 As Long
Dim i As Integer
Dim count As Integer
   i = 0
   count = 0
   
   For i = 3 To 14
       Num10 = Range("B" & i)
       If Range("B" & i).Value <> "" Then
           Range("C" & i).Value = WorksheetFunction.Dec2Hex(Num10)
           count = count + 1
       End If
   Next
 
   MsgBox count & "件のデータを10進数⇒16進数に変換しました。"
 
End Sub

◇使い方

実際に動かしてみましょう。
まずは適当な値を入力します。

変換ボタンをクリックすると........

無事変換されました!

◇最後に

基数変換自体、エンジニアやプログラマーといった職業でしか使わない知識だと思います。

基数変換の中だと16進数⇔10進数は比較的よく使う方ではないでしょうか。
ワークシート関数を使うと短いコードで処理が出来るので、複雑なマクロに組み込む際にもオススメです。

この記事も誰かの役に立つとうれしいです。

【VBA】2進数を10進数に変換するマクロ

◇前置き

先日、10進数を2進数に変換するマクロを紹介しました。
↓詳しくはこちらから
wwwmotou.hatenablog.com

10進数→2進数のマクロを作ったのなら逆も作っちゃいましょう!
ということで今日は2進数を10進数に変換するマクロを紹介します。

◇概要

先日と同じようなExcelを用意します。
※B列とC列を入れ替えただけですね。

B列に2進数を入れて変換ボタンをクリックするとC列に10進数が出力されます。

ソースコード

ソースコードはこんな感じです。

Sub Number_2_to_10()
 
Dim Num2 As Long
Dim i As Integer
Dim count As Integer
   i = 0
   count = 0
   
   For i = 3 To 14
       Num2 = Range("B" & i)
       If Range("B" & i).Value <> "" Then
           Range("C" & i).Value = WorksheetFunction.Bin2Dec(Num2)
           count = count + 1
       End If
   Next
 
   MsgBox count & "件のデータを2進数⇒10進数に変換しました。"
 
End Sub


昨日との違いはこの部分ですね。

Range("C" & i).Value = WorksheetFunction.Bin2Dec(Num2)

Dec2Bin(10進→2進)だったところがBin2Dec(2進→10進)になっています!

◇使い方

実際に動かしてみます。
まずは適当な値を入力します。

変換ボタンをクリックすると........

無事変換されました!

◇最後に

先日と同様なかなかニッチなマクロですが、有難みが分かる人には分かるそんなマクロだと思います。

この記事も誰かの役に立つとうれしいです。

【VBA】10進数を2進数に変換するマクロ

◇前置き

※この記事は少しマニアックな内容になります。

今日紹介するのは10進数を2進数に変換するマクロです。
2進数に馴染みのない方からすると「....??」って感じですよね(笑)

相当ニッチな需要なのは理解しておりますが、最近仕事で2進数を扱う機会があり、

「10進数→2進数の計算、1個ずつやるの面倒臭いなぁ。。。」

と思い、今回のマクロを作るに至りました。

せっかくなのでブログでも紹介させてもらいます!

◇概要

こんな感じのExcelを用意しました。

B列に10進数を入れてボタンをクリックすると、C列に2進数が出力されます。

ソースコード

ソースコードはこんな感じです。

Sub Number_10_to_2()
 
Dim Num2 As Long
Dim i As Integer
Dim count As Integer
   i = 0
   count = 0
   
   For i = 3 To 14
       Num2 = Range("B" & i)
       If Range("B" & i).Value <> "" Then
           Range("C" & i).Value = WorksheetFunction.Dec2Bin(Num2, 8)
           count = count + 1
       End If
   Next
 
   MsgBox count & "件のデータを10進数⇒2進数に変換しました。"
 
End Sub

◇使い方

実際に動かしてみましょう。
まずは適当な10進数をB列に入力します。

変換ボタンをクリックすると........

無事変換出来ました!

◇最後に

冒頭にも申し上げたように、多くの人にとってはなかなか使う機会のないマクロだと思います。
使う人にとっては面倒な計算を一括でやってくれる便利なマクロです。
この記事が誰かの役に立つと嬉しいです。

【VBA】ExcelデータをCSV出力するマクロ

◇前置き

Excelで加工したデータを他アプリに取り込む際、一旦CSVに変換することってありませんか?

加工したデータをCSV変換用ファイルに移して、名前を付けて保存するだけの作業ではありますが、頻繁にやっていると結構めんどうくさいと思います。

そこで今日は、ワンクリックでCSV出力できるマクロを紹介します。

◇概要

今回はこんな感じのExcelを用意しました。
CSV出力したい表とボタンだけあればOKです。

列(項目)は使う分だけ設定しておいて、行は少し余分に作っておくのがオススメです。
※空白のセルは無視されますので。


また、CSVの出力先としてデスクトップにフォルダを用意しました。
出力されるファイル名はyyyymmdd.csvとしています。

ソースコード

今回のソースコードはこんな感じです。

Sub CSV_Output()
   
Dim Output_File As String
Dim Output_Range As Range
Dim New_Book As Workbook
Dim fso As Object
Dim To_Date As String
 
   To_Date = Format(Date, "yyyymmdd")
   
   '出力するCSVのファイルパスを指定
   Output_File = "C:\Users\user\Desktop\CSV出力\" & To_Date & ".csv"
   
   Set Output_Range = Worksheets("Sheet1").Range("B2:F16")
   Set New_Book = Workbooks.Add
   
   'CSVファイルへ出力するデータを新規ブックへコピー
   Output_Range.Copy New_Book.Worksheets(1).Range("A1")
   
   Set fso = CreateObject("Scripting.FileSystemObject")
   
   '同名のCSVファイルが既に存在する場合は削除する
   If fso.FileExists(Output_File) Then
       fso.deleteFile Output_File
   End If
 
   New_Book.SaveAs Filename:=Output_File, FileFormat:=xlCSV, Local:=True
   New_Book.Close SaveChanges:=False
   Set fso = Nothing
 
   Worksheets("Sheet1").Range("B3:F16").ClearContents
 
   MsgBox "CSV出力が完了しました。"
 
End Sub


コピペして使われる方は、アウトプット先のファイルパス・ファイル名、出力範囲などを使いたい条件に編集して使ってください。

◇使い方

さて、実際に動かしてみましょう。
まずは適当なデータを表に入力します。

入力ができたら出力ボタンをクリックします。

すると、こんなメッセージボックスが出てきます。

デスクトップに作った出力用フォルダを確認すると・・・

無事CSV出力されました!

一応中身を確認してみると・・・

ちゃんと入力した内容が出力されていますね!

◇最後に

システム間の連携には意外とCSVが良く使われています。
ちょっとした小技ではありますが、誰かの役に立つと嬉しいです。

【VBA】データ転記マクロ(体温記録)

◇前置き

「同じようなデータを毎日入力する」

そんな仕事ってありませんか?
今回は私が使い回しているデータ転記マクロを紹介します。

かなり汎用性の高いマクロなのですが、今回は例として体温記録用シートにして紹介します。

◇概要

こんなシートを用意しました。

日付と各自の体温を入力して、転記ボタンを押すと隣の記録エリアにデータが転記されます。

既にデータが入っているところはそのままに、どんどんデータが溜まっていく仕様です。

ソースコード

肝心のソースコードはこんな感じです。

Public Sub DataMove()
 
Dim i As Integer
 
   If Range("D4") = "" Then
       MsgBox "日付を入力してください"
       Exit Sub
   End If
 
   '日付データをコピーする
   Range("D4").Select
   Application.CutCopyMode = False
   Selection.Copy
 
   For i = 1 To 4
       '転記先の最終行を探す
       Range("H1000000").End(xlUp).Offset(1, 0).Select
       '日付データを貼り付ける
       Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, _
       Transpose:=True
   Next
 
   '名前と体温のデータをコピーする
   Range("C7:D10").Select
   Application.CutCopyMode = False
   Selection.Copy
 
   '転記先の最終行を探す
   Range("I1000000").End(xlUp).Offset(1, 0).Select
 
   '名前と体温のデータを貼り付ける
   Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, _
   Transpose:=False
 
   '転記後の入力エリアを空にする
   Range("D4,D7:D10").Select
   Selection.ClearContents
 
   MsgBox "データ転記が完了しました"
 
End Sub

お好みでポカヨケを入れることができます。

今回はシンプルに日付が未入力だった時に、メッセージが出るようにしてみました。

◇使い方

実際に動かしてみましょう。

まずは日付と各自の体温データを入力します。

この状態で転記ボタンを押すと.......

無事、データが転記されました!

◇最後に

見た目がシンプルになるように、体温記録シートにして紹介しましたが、様々な作業に流用することで、簡単にデータを蓄積することができます。

蓄積したデータはそのまま加工しても良いですし、データベースに取り込んでしまっても良いです。

今回は分かりやすいように、すぐ隣にデータ転記する仕様でしたが、別シート・別ファイルに転記することも可能です。

色んなところで使って貰えると嬉しいです。