AIによるコードの書き換え実験(VBA→JavaScript)
ファイルを整理していたら、入力した数値の九九を作るVBAを見つけました。
↓こんな感じ

いらないので消そうかなぁと思ったのですが、せっかくならと思い実験してみました。
Bingが提供しているCopilotというAIで、プログラムの書き換えをやってもらいました。
↓Copilotにお願いした内容
JavaScriptとhtmlに書き換えてPrivate Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B2:B2")) Is Nothing Then
Exit Sub
Else
n = Range("B2:B2")
'数字であれば
If IsNumeric(n) = True Then
'1~9の範囲内か
If n >= 1 And n <= 9 Then
'掛け算
For i = 1 To 9 Step 1
ans = n * i
Cells(3 + i, 2).Value = n & "×" & i & "=" & ans
Next i
'範囲外なら
Else
MsgBox "1~9の数字を入力して下さい"
Exit Sub
End If
'数字でなければ
Else
MsgBox "1~9の数字を入力して下さい"
Exit Sub
End If
End If
End Sub
↓Copilotからの回答
VBAのコードをJavaScriptとHTMLに変換することは可能です。以下に、指定されたVBAコードに相当する機能を持つJavaScriptとHTMLのコードを示します。このコードは、ユーザーがHTMLページ上の特定のフィールドに数字を入力すると、その数字の九九の表を生成します。
```html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>九九の表</title>
<script>
document.addEventListener('DOMContentLoaded', function() {
var input = document.getElementById('inputNumber');
var result = document.getElementById('result');input.addEventListener('input', function() {
var n = parseInt(input.value, 10);
result.innerHTML = '';if (!isNaN(n) && n >= 1 && n <= 9) {
for (var i = 1; i <= 9; i++) {
var ans = n * i;
result.innerHTML += n + " × " + i + " = " + ans + "<br>";
}
} else {
alert("1~9の数字を入力して下さい");
}
});
});
</script>
</head>
<body>
<p>数字を入力(1~9):</p>
<input type="number" id="inputNumber" min="1" max="9">
<div id="result"></div>
</body>
</html>
```このHTMLファイルをブラウザで開くと、ユーザーは数字を入力するフィールドを見ることができます。1から9までの数字を入力すると、その数字の九九の表が下に表示されます。範囲外の数字や数字でない値を入力した場合、アラートが表示されます。
このコードは、VBAのイベントハンドラーに相当する機能をJavaScriptで実装しており、HTMLはユーザーインターフェースを提供します。VBAの `Worksheet_Change` イベントに対応するために、HTMLの `input` イベ
HTMLを実行してみたら、おおかた想定通りの動きをしました。
↓実行画面

すごいっすねぇ〜。
プログラミングの勉強しても、AIには追いつけないかもしれないですねぇ…。
デジタルタトゥーの危険性と注意点についてまとめてみた
デジタルタトゥーの危険性と注意点についてまとめてみました。
デジタルタトゥーとは
デジタルタトゥーとは、インターネット上での個々の行動や発言が蓄積され、その人物のデジタルな足跡やプロフィールを形成する現象を指します。
これらの情報は、個人の評判や信用度を左右する可能性があります。
しかし、デジタルタトゥーの危険性は、主にプライバシーの侵害と誤解を招く可能性にあります。
一度インターネット上に公開された情報は、容易には削除できないため、不適切な投稿や過去の行動が将来的に問題を引き起こす可能性があります。
そのため、デジタルタトゥーを防ぐためには、自分のオンライン行動に対する意識を高めることが重要です。
具体的には、自分が投稿する内容をよく考え、プライバシー設定を適切に管理し、定期的に自分のデジタルタトゥーをチェックすることが推奨されます。
また、デジタルタトゥーは、今後も私たちの生活に影響を与え続けるでしょう。
そのため、デジタルリテラシーを身につけ、自分のデジタルタトゥーを適切に管理することが、これからの社会で生き抜くための重要なスキルとなります。
デジタルタトゥーの危険性
デジタルタトゥーの危険性について、以下のようにまとめることができます。
-
永続性: 一度インターネット上に公開された情報は、容易には削除できず、全世界に広がる可能性があります。これにより、過去の不適切な投稿や行動が将来的に個人の評判や信用度を損なう可能性があります。
-
プライバシーの侵害: 個人情報が不適切に共有されたり、悪意のある第三者によって悪用されたりすることがあります。これは、個人のプライバシーを侵害する可能性があります。
-
誤解の可能性: 情報が文脈から切り離されたり、誤解されたりすると、その人物の真の性格や意図とは異なる印象を与えることがあります。
-
深刻な影響: 上記の理由から、デジタルタトゥーの危険性は、個人の生活やキャリアに深刻な影響を及ぼす可能性があります。
これらの危険性を理解し、自分のデジタルタトゥーを適切に管理し、オンラインでの行動に注意を払うことが重要です。
デジタルタトゥーを防ぐ方法
デジタルタトゥーを防ぐ方法について、以下のようにまとめることができます。
-
自己認識: 自分がオンラインで何を共有しているか、どのように perceived されているかを常に認識しておくことが重要です。これには、自分の名前で定期的にインターネット検索を行うことも含まれます。
-
プライバシー設定: ソーシャルメディアのプライバシー設定を適切に管理し、自分の情報がどの程度公開されているかを把握することが重要です。
-
思慮深い投稿: オンラインでの発言や行動は、一度公開されると消去することが難しいため、投稿する前に十分に考えることが重要です。
-
デジタルリテラシー: デジタルリテラシーを身につけることで、デジタルタトゥーのリスクを理解し、適切なオンライン行動をとることができます。
-
定期的な監査: 定期的に自分のデジタルタトゥーを監査し、必要に応じて情報を更新または削除することも有効です。
これらの方法を用いることで、デジタルタトゥーのリスクを最小限に抑えることができます。
まとめ
デジタルタトゥーは、今後も私たちの生活に大きな影響を与えるでしょう。インターネットの普及により、私たちの行動や発言はデジタルタトゥーとして永続的に記録され、全世界に公開される可能性があります。これは、個人の評判や信用度、さらには就職や進学などの機会に影響を及ぼす可能性があります。
また、デジタルタトゥーは、個人だけでなく、企業や組織にとっても重要な意味を持つようになるでしょう。企業のオンラインでの行動や発言は、そのブランドイメージや信頼性を形成するため、適切な管理が求められます。
一方で、デジタルタトゥーの存在は、プライバシーの保護という新たな課題をもたらします。
個人情報が不適切に共有されたり、悪意のある第三者によって悪用されたりすることがあります。
そのため、デジタルリテラシーの向上とともに、プライバシー保護のための法律や規制の整備が必要となるでしょう。
これらのことから、自分のデジタルタトゥーを適切に管理し、オンラインでの行動に注意を払うことが、今後ますます重要となるでしょう。
覚えておくと便利(バッチ、VBScript)
CSVの並び順変更vbs(CSVをvbsにドラッグアンドドロップで作動)
|
Option Explicit ' 引数(ドラッグアンドドロップしたファイル名)を取得 Dim strFileName If objArgs.Count = 0 Then 'MsgBox(strFileName) 'ファイル名が入力されなかったら終了 Dim objFS '定数の定義 Dim objFileInput '今を取得 msgbox(strFileName) Set objFileInput = objFS.OpenTextFile(strFileName, ForReading) Dim aryDestCols(6) '#### ヘッダは不要
'マッピング通りに入れ替え objFileOutput.Write Join(aryDestCols, ",") & vbCrLf objFileOutput.Close |
pingの記録を残す
バッチ
vbs
|
覚えておくと便利(アクセス)
nullを0に変換して、それ以外は数値に変換する
|
フィールド名2: IIf ([フィールド名1] Is Null, 0, Val ([フィールド名1])) |
「#エラー」が出て、「抽出条件でデータ型が一致しません」というエラーが出て困ったら
|
Val(Nz([フィールド名],0)) |
空欄判定
|
IIf([CL定期ステータス(コード)] Is Null,"空欄だったら","空欄じゃなかったら") |
windowsフリーソフト
・Rainlendar Lite
リマインダー機能あり。繰り返しあり。
公式ページ:
・エフワイメモ Fy Memo
データはプレーンテキストに保存される。Ctrl+Sで保存可能。
公式ページ:www.guutaras-notebook.com
・Schwatch
todo管理に便利だが、表示されなくなるバグがあるので注意。
時報が出せる。
公式ページ:
・みかんリスト
データはプレーンテキストに保存される。
全チェック解除の機能があるので、毎日のルーティンチェックに便利。
テキストの設定ファイルをいじって、色や文字の大きさが変えられる。
公式ページ:
・TTClock
タスクに表示される日時の大きさや形式を変更できる。
公式ページ:
・壁カレ4
カレンダーをクリックしてもスケジュール追加画面が出てこない。
色やフォントも変えられるので使い勝手が良い。
・Sumatra PDF
毎回開くファイルを設定できるシンプルなPDFリーダー
覚えておくと便利(エクセル、VBA)
エクセル 50%の確率で1か0をランダムで出してくれる
| =MOD(ROUND(RAND()*10+10,0),2) |
VBAでバッチを動かす(Sylpheedを宛先&件名付きで起動)
|
'参照設定:Windows Script Hpst Object Model Sub mail(subject As String) 'コマンドプロンプトを使うためのオブジェクト Debug.Print cmd 'A1から順番に結果を書き込む Set result = Nothing End Sub |
エクセル VBA 3列目のセルが変わったら、1行文の色を変える
|
Sub cellchange(Target) End Sub Sub row_color_change(Target)
'・行数を取得 '・変わったセルとカテゴリの文字を照合して 'Worksheets(fname).Activate '文字色を変える
|
VBA 入力フォーム
|
[昨日] [今日] [明日] [ yyyy/m/d(aaa)[▼] [挿入] ┌─────────────────────────┐ │ │ │ │ │ │ │ │ │ │ └─────────────────────────┘ [改行] [OK]
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'フォームを読み込んだら Private Sub UserForm_Initialize()
'dlist.Value = Format(Now(), "yyyy/m/d(aaa)") befor = 7 For i = 0 To 32 + befor dlist.AddItem "" dlist.List(i, 0) = "" dlist.List(i, 1) = Format(Now() + i - befor, "yyyy/m/d(aaa)")
Select Case Now() + i - befor Case Now(): dlist.List(i, 0) = "今日" Case Now() + 7: dlist.List(i, 0) = "来週" Case Now() - 7: dlist.List(i, 0) = "先週" Case DateAdd("m", 1, Now()): dlist.List(i, 0) = "来月" End Select Next i dlist.ColumnWidths = 30 dlist.TextColumn = 2 dlist.ListIndex = befor End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '昨日を押したら Private Sub yday_Click() InsertText (day_cal(-1) & " ") End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '今日を押したら Private Sub tday_Click() InsertText (day_cal(0) & " ") End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '明日を押したら Private Sub tmday_Click() InsertText (day_cal(1) & " ") End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '日付の計算 Function day_cal(num) day_cal = Format(Now() + num, "yyyy/m/d") End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '挿入を押したら Private Sub CommandButton1_Click() InsertText (Format(dlist.Value, "yyyy/m/d") & " ") End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '改行を押したら Private Sub kaigyo_Click() InsertText (vbCrLf) End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'OKを押したら Private Sub SaveBtn_Click() ActiveCell.Value = TextBox Call ActibeClear(ActiveCell)
Unload Me End Sub |
覚えておくと便利(バッチ編)
REM カレントディレクトリ
| %‾dp0 |
REM 自分自身のファイル名
| %‾n0 |
REM ドラッグ&ドロップしたファイルパスを取得
| %1 |
REM 文字を切り抜き
REM 例)%tar%=20221201→%y%=2022,%m%=12,%d%=01
| set y=%tar:‾0,4% set m=%tar:‾4,2% set d=%tar:‾6,2% |
REM yyyy/mm/dd以降のファイルをコピー
| xcopy /S /Y /D:%m%-%d%-%y2% %PATH1% %PATH2% |
REM 結合
| set PATH1=パス1¥*.* set PATH2=パス2¥ファイル名.csv type %PATH1% > %PATH2% |
REM ディレクトリとしてコピー
| echo D | /e xcopy パス1¥フォルダ名1 パス2¥フォルダ名2 |
REM ノーメッセージで処理を一時停止する
pause > nul
フォルダ内のファイル名やフォルダ名の一覧をテキストに出力
dir /b > list.txt
フォルダ内のツリーをテキストに出力
tree /f > tree.txt
RM パス1にあるfnameの最新ファイルを探して、PATH2にリネームしてコピーしてくれる
| @ECHO off SET PATH1="パス1¥" SET fname="ファイル名*.csv" SET PATH2="パス2¥ファイル名.csv" for /F "tokens=1* delims=" %%a in ('dir /b /O:D %PATH1%%fname%') do set fname=%%a copy %PATH1%%fname% %PATH2% |
ECHO 最新更新日が30日以上前のファイルを移動
set PATH1=C:\AA\AA\AA
set PATH2=C:\BB\BB\BB\BB
forfiles /p %PATH1% /d -30 /m "TEST*.csv" /c "cmd /c move @path %PATH2%"
RM 2時間後にシャットダウン
|
@echo off echo 2時間後にシャットダウンしますか? set /P STR_INPUT="入力:" IF "%STR_INPUT%" == "y" ( timeout /t 7200 |
RM 先月、来月の計算
RM 今年:TYEAR、去年:LYEAR、来年:NYEAR
RM 今月:TMONTH、先月:LMONTH、来月:NMONTH
|
REM 例)12月 set TYEAR=2022 set TMONTH=12 REM 月は1桁へ set /a TMONTH = 1%TMONTH% - 100
echo ★先月と来月を計算
REM ↓ 先月 ↓ REM マイナスならフラグを立てる set LFLG=1 REM マイナスなら月を計算 ) REM 月は2桁にする echo 先月:%LMONTH% REM マイナスなら年を計算 ) else ( REM ↑ 先月 ↑
REM ↓ 来月 ↓ REM 13ならフラグを立てる REM 13なら1を代入 REM 月は2桁にする echo 来月:%NMONTH% REM 13なら年+1
REM 今月は2桁にする |