2026年2月7日土曜日

Excelのvbaで他のアプリのウィンドウ内のテキストボックスにテキストを入力する

Excelのvbaで他のアプリのウィンドウ内のテキストボックスにテキストを入力し、ボタンを押します。 

Windows API (Win32 API)を使う。
DFindWindow系はクラス名かウィンドウハンドルのどちらかを指定する。指定しない方はvbNullString。

32bit環境でしか動作確認を行っておらず、DecleareにPtrSafeをつけてみたけどそれでOKかどうかよくわからない。LongPtrに変更が必要な個所があるかもしれない。


Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As String) As LongPtr

Sub test()
    Dim mainHwnd As Long, editHwnd As Long, btnHwnd As Long
    Const WM_SETTEXT As Long = &HC
    Const BM_CLICK As Long = &HF5
   
    mainHwnd = FindWindow(vbNullString, "Meiryo UIも大っきらい!!")
    editHwnd = FindWindowEx(mainHwnd, 0&, "Edit", vbNullString)
    btnHwnd = FindWindowEx(mainHwnd, 0&, vbNullString, "設定せず終了")
   
    Call SendMessage(editHwnd, WM_SETTEXT, 0, "メイリオ  11pt")
    Call SendMessage(btnHwnd, BM_CLICK, 0, 0)
End Sub


参考にしたサイト様
【VBA×WindowsAPI】Buttonコントロールを操作する LiCLOG様

VBAでWin32APIを使ってシートの文章を全てメモ帳に自動入力する方法 Excel作業をVBAで効率化 様

ウィンドウのハンドル・クラス名一覧を作成する Excel Tips for Learners様


2025年10月5日日曜日

FF外伝 光の4戦士 星の奈落MAP

ファイナルファンタジー外伝 光の4戦士

 ラストダンジョンの星の奈落の5F以降のマップです。web上で見つけられなかったのでメモしてみました。Dが下り、Uが登りです、ナンバリングとかメチャクチャですが参考にしてください。私はD11を見つけられずかなり長時間さまよいました。冒険家2人でとんずら推奨。

クリア時間31H、LV51、勇者、勇者、白、精霊
かなり癖が強かったです。



2025年3月14日金曜日

Excelのvbaでjsonファイルを読み込んでシートに記載する

 エクセルのvbaでjsonファイルを読み込んでシートに記載する


準備としてVBA-JSON(JsonConverter.bas)をインポートしておく

https://github.com/VBA-tools/VBA-JSON

Visual Basic Editor の参照設定でMicrosoft Scripting Runtimeにチェックを入れる






jsonファイル(test.json)

{"aa":[
    {
        "id":"1",
        "contents":"あああaa"
    },
    {
        "id":"2",
        "contents":"hogehoge"
    }
]}






vbaのマクロ

Set jsonObj = JsonConverter.ParseJson(buf)とすることで、オブジェクトに代入できて

.countで要素数を返したり
()で配列みたいに指定したり
For Each Key でキー名を順に取り出したり出来るみたいです。
キー名は""で囲うのは忘れずに

Sub open_json()
    Dim buf, jsonObj, cnt, i
   
    With CreateObject("ADODB.Stream")
        .Charset = "UTF-8"
        .Open
        .LoadFromFile "./test.json"
        buf = .ReadText
        .Close
    End With
   
    Set jsonObj = JsonConverter.ParseJson(buf)
   
    For i = 1 To jsonObj("aa").Count
        cnt = 1
        For Each Key In jsonObj("aa")(1)
            Cells(1, cnt) = Key
            If IsObject(jsonObj("aa")(i)(Key)) = False Then Cells(i + 1, cnt) = jsonObj("aa")(i)(Key)
            cnt = cnt + 1
        Next
    Next i
End Sub

2025年2月2日日曜日

ExcelのFaceIDリスト

 エクセルのFaceIDリスト















たぶん2019のFaceIDリスト



2024年12月7日土曜日

韓国語の「歌を歌う」みたいに名詞と動詞がだいたいセットになる言葉

 韓国語の「歌を歌う」みたいに名詞と動詞がだいたいセットになる言葉メモ

ただし、肝心の「歌を歌う」は노래를 부르다.


꿈을 꾸다. 夢を見る

잠을 자다. 寝る

그림을 그리다. 絵を描く

춤을 추다 踊りを踊る

부침개를 부치다 チヂミを焼く






=========

품사 品詞


명사 名詞

대명사 代名詞

수사 数詞

관형사 連体詞、冠形詞

부사 副詞

토씨 助詞

감탄사 感嘆詞


동사 動詞

형용사 形容詞


존재사 存在詞

지정사 指定詞

동명사 動名詞

부정사 不定詞(韓国語には存在しない)

조동사 助動詞

전치사 前置詞(韓国語には存在しない)

의문사 疑問詞

약자、준말、줄임말、줄인 말、약어 略語


체언 体言

용언 用言

어간 語幹

어미 語尾

관계어 関係語

독립어 独立語

수식어 修飾語

접속어 接続語


주어 主語

술어 述語

목적어 目的語


경어、존댓말、높임말、존경어 尊敬語

반말、반모 タメ口


말뜻、말귀 意味


한글 ハングル

모음 母音 21個=基本母音10個+合成母音11個

자음 子音 19個=基本子音10個+激音4個+濃音5個


안울림소리、무성음 無静音

평음、예사소리 平音 ㄱ, ㄷ, ㅂ, ㅅ, ㅈ

격음、거센소리 激音 ㅋ,ㅌ,ㅍ,ㅊ

경음、된소리 濃音 ㄲ,ㄸ,ㅃ,ㅆ,ㅉ

마찰음 摩擦音 ㅎ


울림소리、유성음 有声音

비음 鼻音 ㄴ,ㅁ,ㅇ

유음 流音 ㄹ


기역(キヨク)ㄱ

니은(ニウン)ㄴ

디귿(ティグッ)ㄷ

리을(リウル)ㄹ

미음(ミウム)ㅁ

비읍(ピウプ)ㅂ

시옷(シオッ)ㅅ

이응(イウン)ㅇ

지읒(チウッ)ㅈ

치읓(チウッ)ㅊ

키읔(キウク)ㅋ

티읕(ティウッ)ㅌ

피읖(ピウプ)ㅍ

히읗(ヒウッ)ㅎ

쌍기역(サンギヨク)ㄲ

쌍디귿(サンディグッ)ㄸ

쌍비읍(サンビウプ)ㅃ

쌍시옷(サンシオッ)ㅆ

쌍지읒(サンジウッ)ㅉ





2024年11月16日土曜日

韓国語の単語帳 「hanaの韓国語単語 中級編」は2週目から始めよう

韓国語の勉強のお話です。

この記事でお伝えしたいこと

・hanaの韓国語単語 <中級編>ハン検準2級レベル で勉強するときは、2週目から始めましょう


私は韓国語の勉強を始めて半年でハングル検定5級(98点)、1年でハングル検定4級(92点)、1年半でハングル検定3級(81点)に合格しました。

3級を受けるときにいろいろwebで検索したのですが、あまり情報がなくて寂しかったので私の経験談も少しだけ書いておきます。

韓国語の勉強を始めて1年で4級を受験した後、1年勉強してから3級を受けるつもりでしたが、知人に韓国語勉強のテキストをもらったのを機に頑張らないとと思って、事前の想定より半年早く受験の申し込みをしました。

試験前の勉強の進捗はというと、単語帳は半年以上前に1周終わっておりある程度は分かる状況、文法はできる韓国語中級1をやっていたのですが、難しくて心が折れており、試験2週間前まで9課までしか進んでいませんでした。しかも初級2や中級1前半の内容もきちんと身についていない状況。試験前に焦って雑に18課まで進めましたが、Reviewの練習問題の正答率は1割くらいでした。ヨボセヨ韓国語の練習問題の正答率は6~9割でした。

3級の試験を受けた感想は、リスニングが予想より全然聞き取れませんでした。単語の勉強だけはしっかりやっていたのでなんとか筆記で点数を稼いで合格することができました。3級までは60点合格なので完璧にできていなくても合格できる試験だと感じました。

単語の勉強について
5級の時は公式ホームページの語彙リスト、4級はどこかのサイトに載っていた語彙一覧で単語の勉強をしました。

3級の勉強を始めるとき(5級の受験直後)に単語帳を購入しようと思い、少し調べました。トリリンガルのトミさんの動画によると
・音声がある
・例文がある
・赤シートがある
・(カタカナで発音が書いてない)
がよさそうとのことでした。

今適当に検索して出てきたのが下記の画像になります。私は本屋でキクタンとできる韓国語単語集とhanaの韓国語単語を比較して、
・字が大きくてフォントが見やすかった
・今後を見据えた場合により上級のラインナップがある方がよかった
という理由で改訂版hanaの韓国語単語 <初中級編>ハン検3級レベルを購入しました。


購入してよかったことが2点あります。
・見出し語→メイン訳→例文→例文訳の音声mp3が無料でダウンロードできる
・難しい発音にはハングルの読み方(発音記号?)が記載されている

キクタンの音声も聞いてみましたが、私はBGMが無いほうが好みだしキクタンは例文の音声がなかったように思います。

私は単語帳で勉強するのが好きなので楽しく単語を学ぶことができました。
初見で知っている単語が4割くらい、見たことある単語が3割くらい、初めて見る単語が3割くらいの割合でした。
そして初中級が終わるころに(改訂版ではない方の)hanaの韓国語単語 中級編 ハン検準2級レベル を購入しました。

初中級が楽しかったので期待していたのですが、1週目が驚異的にとっつきにくく一瞬で挫折してしまいました。
最初の4日間が家族・人間関係の単語になっているのですが、
・子供、ご子息、一人息子、双子
・人妻、妻、奥さま、妻をめとること、嫁、婿、(弟から見た)兄の妻、(弟から見た)姉の夫、(妹から見た)兄の妻、(妹から見た)姉の夫、(兄から見た)弟の妻、(兄から見た)妹の夫、(姉から見た)弟の妻、(姉から見た)妹の夫、
・妻の実家、既婚女性の実家、夫の実家、嫁ぎ先、母の実家
・宴会、還暦、先祖、子孫、節句、チュソク、祭祀、葬式
など、しょっぱなから全力で心を折りに来ます。

そして5日目が動詞なのですが
・むく、折る、切る、刻む、破る、破裂させる、割る、壊す、剥がす、溶かす、裂く、きざむ
とこれまた全力でつぶしに来ます。

ちなみに2週目以降は普通に勉強しやすい単語が並んでおり、問題なく勉強できます。
なので、最初にも書きましたが、hanaの韓国語単語 <中級編>ハン検準2級レベル で勉強するときは、2週目から始めましょう。

ちなみに中級編は初中級編には用意されていた、見出し語→メイン訳→例文→例文訳の音声が存在せず少し残念でした。

私は「見出し語→メイン訳→例文」と「見出し語→例文訳」をダウンロードして、各ページの「見出し語→例文訳」「見出し語→メイン訳→例文」の順に再生されるようにしています。例文訳を先に聞くのがポイントで、韓国語の例文を先に聞いても難しくて理解できないのですが、先に例文訳を聞いておくとなんとなく韓国語の例文が聞き取れたような気になってうれしいです。

最近はQuizletというアプリでも単語の勉強しています。このアプリは他の学習者様が作ってくださった学習セットを読み込んで使えるのですが、hanaの韓国語単語 中級編の単語学習セットを作ってくださっている方がおり、使わせていただいています。紙の単語帳ではできないシャッフル機能があるので気に入っています。

ハングル検定 準2級は必要な語彙数や慣用句の数が膨大になるし、合格点も上がるのでとても難しく、ハングル検定を受けるのは1年以上先になると思います。自分のペースでこつこつ勉強していけたらと思います。
この記事を読んでくださった優しい方も勉強頑張ってください。成功を祈っています。


===========

トウミの種類

■合格トウミ 2006年 白地にカラフルな文字のやつ
 初・中級編と上級編の2冊


■合格トウミ改訂版 2011年2月 黄色/緑と白のグラデーションにカラフルな文字
 初・中級編と上級編と上達トハギの3冊
 文字が大きく2色刷りに、慣用句と慣用表現はトハギに移動

上達トハギ 2011年3月
 旧版トウミ2冊の慣用句、ことわざ、慣用表現をまとめたもの



■新装版合格トウミ 2016年2月 上級は紫、中級は緑、初級はピンク
 初級、中級、上級の3冊、慣用句、ことわざ、慣用表現は各級のトウミに移動
 慣用句は日本語に直訳して意味が分かるもの準2級330個、上級808個が削除。
 音声ペン対応
 


■合格トウミ改訂版 2022年2月発売 上級は紫、中級は青、初級は黄色
 漢字表記で旧字体と新字体で音が異なる場合は新字体の横に()で旧字体を記載
 音声ペン対応は変わらず



2024年4月13日土曜日

pptのvbaについて調べたメモ

 pptのvbaについて調べたメモ


複数のグラフを選択してpptに貼り付けるのが遅いのを改善しようとして色々と調べています。

Excelで12個のグラフを選択して、pptにピクチャで貼り付けるのに4秒かかります。

デバイスに依存しないピクチャ(DIB)は2秒程度で早いのですが、vbaで設定がありません。

SVGも2秒くらいなのですが、今度は貼り付けた後のサイズ変更に時間がかかってしまいます。

SVG形式はメタファイルよりも高速で貼り付けられるし、拡大してもきれいで優秀なのですが、あまりwebに情報が載っていません。PasteSpecialのdatatypeは12 (ppPasteSVG)です。

pptのグラフィック処理が遅いのではないかと考えています。

エクセル側で図としてコピーなども試してみましたが遅かったです。


The Voyage of a neuromancer
PowerPointにはScreenUpdatingがない

https://neuromancer-sho.hatenablog.com/entry/20130308/1362743363


hiroshi akutsuの日記
vba【図としてコピーした画像をpower pointへ貼り付け時に変数に代入】

https://hakoniwahaniwa.hatenablog.com/entry/2014/12/16/101720






2024年4月6日土曜日

Excel vbaで複数グラフを選択する

 Excel vbaで複数グラフを選択する


直接この記事と関係ないけど、下記のvbaのリストがとても良いです。

Kunihito TOBITA Office (飛田国人)

Excel: VBA覚え書き 

http://www.ess.osakafu-u.ac.jp/human/tobita/2018/08/16/excel3/


'これが基本
ActiveSheet.Shapes.Range(Array("グラフ 1", "グラフ 2")).Select

'これはNG
a=Array("グラフ 1", "グラフ 2")
ActiveSheet.Shapes.Range(a).Select


'これはOK
Dim a() As Variant
a=Array("グラフ 1", "グラフ 2")
ActiveSheet.Shapes.Range(a).Select

'これもOK
ReDim a(0 To 1)
a=Array("グラフ 1", "グラフ 2")
ActiveSheet.Shapes.Range(a).Select

'これはNG
aa1 = "グラフ 1,グラフ 2"
buf2 = Split(aa1, ",")
ActiveSheet.Shapes.Range(buf2).Select

'Variant/Variantでないとダメみたい。






追記
詳しい理由はわからないけど配列に代入しておいて、Rangeのカッコの中でJoinしてsplitするといけるっぽい。



2023年7月23日日曜日

vbaでシート一覧とグラフ一覧を取得

 Excel vbaでシート一覧とグラフ一覧を取得する

実行するとアクティブシートの1行目にラベル、2行目以降に各シートのグラフ名を列挙します。


A列 Sheet Name シート名

B列 Graph Name グラフ名(カンマ区切り)

C列 paste1.txt(全部同じ)

D列 PageDown 1(全部同じ)

E列 Comment シート名


Sub sht_get()
   
    Dim dt, cnt, buf, sh, g
    cnt = 2
   
    ReDim dt(1 To Worksheets.Count + 1, 1 To 5)
   
    dt(1, 1) = "Sheet Name"
    dt(1, 2) = "Graph Name"
    dt(1, 3) = "Paste"
    dt(1, 4) = "PageDown"
    dt(1, 5) = "Comment"
   
    For Each sh In ThisWorkbook.Sheets
        If sh.ChartObjects.Count = 0 Then GoTo skip_syori
       
        dt(cnt, 1) = sh.Name
       
        buf = ""
        For Each g In sh.ChartObjects
            buf = buf & "," & g.Name
        Next g
        dt(cnt, 2) = Mid(buf, 2)
        dt(cnt, 3) = "paste1.txt"
        dt(cnt, 4) = 1
        dt(cnt, 5) = sh.Name
        cnt = cnt + 1
skip_syori:

    Next sh
    Cells(1, 1).Resize(cnt - 1, 5) = dt
   
End Sub

2023年6月24日土曜日

pythonで近似式とR2を求める

Pythonを使って下記を行います。

・二次元配列(100x2)の値を間引く
・二次元配列(10x2)の値を第0列の値で昇順にソート
・二次元配列をx,yの散布図と考えて、1次、2次、5次の多項式近似で近似曲線を作成
・各近似式の決定係数R2を求める

numpyが必要

import numpy as np

arr = np.random.rand(100, 2)    # 100 x 2の配列の乱数
arr2=arr[::10]                  #1/10に間引く
arr3 = np.sort(arr2,axis=0)     #0番の列で昇順にソート

coe1 = np.polyfit(arr3[:,0], arr3[:,1], 1)  #1次多項式
coe2 = np.polyfit(arr3[:,0], arr3[:,1], 2)  #2次多項式
coe5 = np.polyfit(arr3[:,0], arr3[:,1], 5)  #3次多項式

fit1=np.poly1d(coe1)(arr3[:,0])
fit2=np.poly1d(coe2)(arr3[:,0])
fit5=np.poly1d(coe5)(arr3[:,0])

r2_1 = np.corrcoef(arr3[:,1], fit1)[0,1] ** 2   #yの値同士を入れる
r2_2 = np.corrcoef(arr3[:,1], fit2)[0,1] ** 2   #yの値同士を入れる
r2_5 = np.corrcoef(arr3[:,1], fit5)[0,1] ** 2   #yの値同士を入れる

print(r2_1,r2_2,r2_5)

 

=========

Pythonを使ってグラフを読み取ります。作りかけです。

・グラフの枠の座標を取得する
・グラフの枠内を白く塗りつぶす
・軸の数字と座標を認識する
グラフデータの読み込みや画像の座標からグラフの数値への変換は未実装です。

pillow、pyocr、Opencv、Tesseract、numpyが必要です。


import sys
import os
from PIL import Image
import pyocr
import cv2
import numpy as np

#Tesseractのインストール場所をOSに教える
tesseract_path = "C:\Program Files\Tesseract-OCR"
if tesseract_path not in os.environ["PATH"].split(os.pathsep):
    os.environ["PATH"] += os.pathsep + tesseract_path

#OCRエンジンを取得する
tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("OCRエンジンが指定されていません")
    sys.exit(1)
else:
    tool = tools[0]

# 8ビット1チャンネルのグレースケールとして画像を読み込む
img_org = cv2.imread("sample.bmp", cv2.IMREAD_GRAYSCALE)
img=cv2.bitwise_not(img_org)    # 白黒反転 輪郭検出で白色の枠を検出するため、外枠が白になるように白黒反転

#輪郭検出 cv2.RETR_EXTERNAL 最外部の輪郭のみ検出 CHAIN_APPROX_TC89_L1:直線近似できる部分の輪郭点を省略
#contours[輪郭番号][点の番号][0][X座標, Y座標]
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1 )

# 画像表示用に入力画像をカラーデータに変換する
img_disp = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
img_disp_org = cv2.cvtColor(img_org, cv2.COLOR_GRAY2BGR)

# 輪郭の点の描画
#contours[輪郭番号][点の番号][0][X座標, Y座標]
for i, contour in enumerate(contours):
    # 輪郭を描画 画像名、輪郭座標、輪郭番号、色、線幅(-1は塗りつぶし)
    cv2.drawContours(img_disp, contours, i, (255, 0, 0), 2)

    # 傾いていない外接する矩形領域
    x,y,w,h = cv2.boundingRect(contour)
    if w>100:       #幅100より大きい(グラフの外枠)のとき、orgのほうは白く塗りつぶし
        cv2.rectangle(img_disp,(x,y),(x+w-1,y+h-1),(0,255,0),2)
        cv2.rectangle(img_disp_org,(x,y),(x+w-1,y+h-1),(255,255,255),-1)    #白く塗りつぶす
       
#fileに書いて後ろでもう一度読み込んでいる。絶対もっと良い方法がある
cv2.imwrite('output.png', img_disp_org)

#画像の読み込み
file_path = "sample.bmp"
img = Image.open('output.png')      #ここはいつか改善する
img2 = img_disp_org                 #グラフ部を塗りつぶした画像

#文字と座標を読み取る
box_builder = pyocr.builders.WordBoxBuilder(tesseract_layout=6)     #6が最適かは不明
text_position = tool.image_to_string(img,lang="eng",builder=box_builder)

#取得した座標と文字を出力、画像に枠を書き込む
for res in text_position:
    print(res.content)
    print(res.position)
    cv2.rectangle(img2,res.position[0],res.position[1],(0,0,255),2)

#検出した軸ラベルの座標からx,y軸それぞれのグラフ範囲を推定する処理を入れる 未
#別途グラフの系列データを認識して、グラフ範囲に変換する 未

#四角を書き込んだ画像を表示
cv2.imshow("image",img2)
cv2.waitKey(0)

2023年4月16日日曜日

VBAで系列を追加する jpegをpptスライドに貼る pythonでs2pファイルをde-embedする

Chat-GPTに教えてもらいました。あいつ凄いな。


vbaで散布図に系列を追加する
系列の順序を指定したい場合、非表示の系列(.IsFiltered = True)があるとPlotOrderが機能しないので.Formulaプロパティで順序を指定することにしました。Formulaプロパティの操作はエラーがおきやすいので注意。withを使ったほうが速いらしいのでwithを入れました。

Sub AddNewSeries3()
    Dim myChart As Chart
    Set myChart = ActiveSheet.ChartObjects("Chart 1").Chart
   
    Dim mySeries As Series
    Set mySeries = myChart.SeriesCollection.NewSeries
   
    With mySeries
        'Name,X,Y,Order
        .Formula = "=SERIES(Sheet3!$A$1,Sheet3!$A$2:$A$6,Sheet3!$B$2:$B$6,3)"
       
        'set the marker type and size
        .MarkerStyle = xlMarkerStyleCircle
        .MarkerSize = 8
       
        'set the line type and color
        .ChartType = xlXYScatterLines
        .Format.Line.Weight = 2
        .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
    End With
End Sub


pptでフォルダ内のjpegファイルをpptの各ページに貼り付ける。

Sub InsertImagesToSlides()
    Dim imagePath As String
    Dim imageFiles() As String
    Dim i As Integer
    Dim slide As Slide
    Dim slideIndex As Integer
   
    ' Specify the path to the folder containing the JPEG files
    imagePath = "C:\Path\To\Your\Images\Folder\"
   
    ' Collect all JPEG files in the specified folder
    imageFiles = GetFilesInFolder(imagePath, "*.jpg")
   
    ' Create a new PowerPoint presentation
    Dim pptApp As Object
    Set pptApp = CreateObject("PowerPoint.Application")
    pptApp.Visible = True
    Dim pptPres As Object
    Set pptPres = pptApp.Presentations.Add
   
    ' Loop through the image files and insert each one into a new slide
    slideIndex = 1
    For i = LBound(imageFiles) To UBound(imageFiles)
        Set slide = pptPres.Slides.Add(slideIndex, 12) ' 12 represents the slide layout (blank slide)
        slide.Shapes.AddPicture FileName:=imagePath & imageFiles(i), LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=pptPres.PageSetup.SlideWidth, Height:=pptPres.PageSetup.SlideHeight
        slideIndex = slideIndex + 1
    Next i
   
    ' Clean up
    Set slide = Nothing
    Set pptPres = Nothing
    Set pptApp = Nothing
   
    MsgBox "Images inserted successfully!"
End Sub

Function GetFilesInFolder(folderPath As String, filePattern As String) As String()
    Dim files() As String
    Dim file As String
    Dim i As Integer
   
    file = Dir(folderPath & filePattern)
    i = 0
   
    Do While file <> ""
        ReDim Preserve files(i)
        files(i) = file
        i = i + 1
        file = Dir
    Loop
   
    GetFilesInFolder = files
End Function


pythonでサブフォルダ[rename]内のすべてのファイルについて、ファイル名先頭の数字(アンダーバー区切り)を3桁で0埋めしてリネーム

import os, re

def main():
    for f in os.listdir("resize"):
 
        ff=f.split('_',1)
        ff[0]='{0:03d}'.format(int(ff[0]))
        f2="_".join(ff)
        of = "resize/" + f
        nf2="resize/" + f2
        try:
            os.rename(of, nf2)
            print(of, " >> ", nf2)
        except:
            print(u"リネーム前と後が同じです。", nf2)

if __name__ == '__main__':
    main()



pythonでtouchstone file をde-embedする。
ドラッグアンドドロップや引数での処理に対応したいけどpathの処理がうまく理解できず、残課題です。

import skrf as rf
from os import path

mypath =path.dirname(__file__)
evb1 = rf.Network(path.join(mypath,"a.s2p"))
evb2 = rf.Network(path.join(mypath,"b.s2p"))
dut = rf.Network(path.join(mypath,"dut.s2p"))

# evb2.renumber([0,1],[1,0])

evb1_intp=evb1.interpolate(dut.frequency)
evb2_intp=evb2.interpolate(dut.frequency)

dut_de=evb1_intp.inv ** dut ** evb2_intp.inv

dut_de.write_touchstone(path.join(mypath,"dut_de-embed3.s2p"))

2023年3月3日金曜日

VBAでcsvファイルを開く

 VBAでcsvファイルを開く

QueryTableで開くと速いという記事を見つけたので試してみた。別に早くない。区切り文字が決まっているならline inputで1行づつ読んでsplitして配列に入れて貼り付けるほうが早い。


sub open_csv()

    Dim msh, fname

    fname ="C:\local\test.csv"

    msh ="test"

    Sheets.Add(After:=Sheets(Sheets.Count)).Name  = msh

    Set ws = Sheets(msh)

    Set qt = ws.QueryTables.Add(Connection:="TEXT;" & fname, Destination:=ws.Range("A1")) 

    With qt

        .TextFilePlatform = 932          ' 文字コードを指定

        .TextFileParseType = xlDelimited ' 区切り文字の形式

        .TextFileCommaDelimiter = True   ' カンマ区切り

        .RefreshStyle = xlOverwriteCells ' セルに上書き

        .Refresh                         ' データを表示

        .Delete                          ' CSV との接続を解除

    End With


End Sub



VBAで複素数の計算とSparameterの変換

Excel VBAで複素数の計算

vbaで複素数を扱う場合、WorkSheetFunctionを使うより自分で関数を作ったほうがかなり速い。



'複素数の型宣言
Type Complex
    re As Double
    im As Double
End Type


'VBA 複素数の定義
Function CPX(a As Double, b As Double) As Complex
    CPX.re = a
    CPX.im = b
End Function

Function CPXR(a As Complex) As Double
    CPXR = a.re
End Function

Function CPXI(a As Complex) As Double
    CPXI = a.im
End Function

Function CPXABS(z As Complex) As Double
    CPXABS = Sqr(z.re ^ 2 + z.im ^ 2)
End Function

Function CPXSUM(z1 As Complex, z2 As Complex) As Complex
    Dim z As Complex
    z.re = z1.re + z2.re
    z.im = z1.im + z2.im
    CPXSUM = z
End Function

Function CPXSUB(z1 As Complex, z2 As Complex) As Complex
    Dim z As Complex
    z.re = z1.re - z2.re
    z.im = z1.im - z2.im
    CPXSUB = z
End Function

Function CPXPRD(z1 As Complex, z2 As Complex) As Complex
    Dim z As Complex
    z.re = z1.re * z2.re - z1.im * z2.im
    z.im = z1.re * z2.im + z1.im * z2.re
    CPXPRD = z
End Function


Function CPXDIV(z1 As Complex, z2 As Complex) As Complex
    Dim z As Complex
    Dim k As Double
    k = z2.re ^ 2 + z2.im ^ 2
    z.re = (z1.re * z2.re + z1.im * z2.im) / k
    z.im = (z1.im * z2.re - z1.re * z2.im) / k
    CPXDIV = z
End Function



vbaでSパラメータを処理するときのフォーマット変換とk値やMAGの算出

Function RItoDB(r, i)
    RItoDB = 20 * Log(Sqr((r ^ 2) + (i ^ 2))) / Log(10)
End Function

Function RItoMAG(r, i)
    RItoMAG = Sqr((r ^ 2) + (i ^ 2))
End Function

Function RItoANG(r, i)
    RItoANG = WorksheetFunction.Degrees(WorksheetFunction.Atan2(r, i))
End Function

Function LINtoDB(mag)
    LINtoDB = 20 * Log(mag) / Log(10)
End Function


s11 = CPX(S_11R, S_11I)
s21 = CPX(S_21R, S_21I)
s12 = CPX(S_12R, S_12I)
s22 = CPX(S_22R, S_22I)

' calculation MAG k
d = CPXABS(CPXSUB(CPXPRD(s11, s22), CPXPRD(s12, s21)))
bb = (1 + CPXABS(s11) * CPXABS(s11) - CPXABS(s22) * CPXABS(s22) - d * d)
k = (1 - CPXABS(s11) * CPXABS(s11) - CPXABS(s22) * CPXABS(s22) + d * d) / (2 * CPXABS(CPXPRD(s12, s21)))
If (1 - CPXABS(s11)) <> 0 Then vswr1 = (1 + CPXABS(s11)) / (1 - CPXABS(s11))
If (1 - CPXABS(s22)) <> 0 Then vswr2 = (1 + CPXABS(s22)) / (1 - CPXABS(s22))
msg = 10 * (Log(CPXABS(s21) / CPXABS(s12)) / Log(10))
If bb > 0 Then mag = msg - 10 * (Log(k * 1 + Sqr(k * k - 1))) / Log(10)

2022年12月11日日曜日

オズの魔法使いシリーズ The Wonderful Wizard of Oz

 オズの魔法使いシリーズ  


1. The Wonderful Wizard of Oz

有名な1作目。

Dorothy 主人公。カンサス出身の女の子。

Scarecrow カカシ。続編でも頻繁に出てくる。魔法生物ではないが、同等のチート能力(食べない、眠らない、疲れない)を持つ。ただし、火や水に弱いため、まだ納得できる。

Tin Woodman 木こり。続編でもたまに出てくる。やさしくて良いやつ。彼も魔法生物ではないのにチート能力を持つ。水に弱いが武器もあり、カカシより能力としては高い。

Cowardly Lion ライオン。珍しく普通の動物。続編では主にちょい役。

Wizard of Oz 魔法使い。続編ではかなりパワーアップして頻繁に活躍する。


2. The Marvelous Land of Oz

オズの国の体制が出来上がる話。以降の続編では基本的にこの体制が続くことになる。

Tip 主人公の少年。ほとんどの続編に出てくる。

Jack Pumpkinhead 魔法生物。おとなしい。

Sawhorse ヘボい見た目とは裏腹に、オズシリーズで最強の魔法生物。性格も超強気。続編でも頻繁に登場し、大活躍する。

Jinjur 女の子。軽いノリでエメラルドシティを制圧する。


3. Ozma of Oz

2作目にドロシーが出なかったことにかなりの苦情が来たみたいで、ドロシーが出てくる。

Billina ニワトリ。珍しく普通の動物。性格が超強気。

Tik-Tok ゼンマイ駆動のロボ。

Nome King 地下の王様。気性が荒い。続編でもよく出てくる。いろいろ大変。


4. Dorothy and the Wizard in Oz

地割れに飲み込まれて地下に落ちる。Ozのおっさんがエメラルドシティに帰ってくる。個人的にはシリーズ一番のそりゃないだろエンド。

Zeb ドロシーのいとこ。続編には登場しない。

Jim Zebの馬。続編には登場しない。

Eureka ネコ。覚えていない。


5. The Road to Oz

みんな大好きShaggy Manが出てくる。というかこのお話ではまともなのは彼くらい。
ここで出てくるButton-BrightやPolychromeは全く役に立たない。Button-Brightに至ってはI don't know以外しゃべっていないと思う。

Syaggy Man けばだってるだけでまともなおじさん。安定感抜群。オズシリーズの良心。

Button-Bright 3~4歳くらいの男の子。すぐ迷子になる。I don't knowしか言わない。この話では全く役に立たないが続編で(人間的に)成長した姿が見られる。

Polychrome 虹の娘。踊りまくる。Button-Bright同様に役に立たない。彼女も続編で(人間的に)成長した姿が見られる。


6. The Emerald City of Oz

Nome Kingが攻め入ってくる話。作者としてはいったん終わりにしたかったようだ。


7. The Patchwork Girl of Oz

たぶん作者はほかのシリーズを作りたかったけど挫折してオズシリーズに戻ってきた。

Scraps いわゆるPatchwork Girl。Crazyと言われることが多いが、オズシリーズの中ではまともな方。ひたすらポジティブ。

Ojo Munchkinの少年。 Ojo the unluckyと呼ばれるが、そうでもない。

Uncle Nunkie 一つの単語しかしゃべらない。理由はわからないけど、とても好きなキャラ。


8. Tik-Tok of Oz

Tik-Tokはそんなに活躍しない。みんな大好きShaggy Manがお兄ちゃんを助けに行く。

Betsy Bobbin 女の子。

Hank ラバ。超強気。


9. The Scarecrow of Oz

前半がものすごく地味で読むのがつらい。Button-Brightが成長して話が通じるようになっている。このへんのキャラは別の小説から持ってきたようだ。Scarecrowはそんなに活躍しない。いつも謙虚な彼が終盤に超強気で現れる。その割に無策。

Trot 女の子。

Cap'n Bill  片足の船長。

Ork 鳥。しっぽがプロペラになっている。


10. Rinkitink in Oz

オズシリーズとはほとんど関係ない。たぶん別の話として作っていて、なんらかの理由でオズシリーズに組み込まれた。申し訳程度にノームキングが出てくる。

Inga 主人公の王子様。国を滅ぼされてひどい目に合う。

King Rinkitink しゃれを言ってひたすら笑っている王様。英語学習者には笑いのツボが少し難しい。

Bilbil ヤギ。口が悪いが本当はいいやつ。


11. The Lost Princess of Oz

Ozmaと魔法関連の道具が消えるてみんなで探しに行くというストーリー。各種チート道具を完封してオズ一味を手玉に取る悪役がいつになく強力。

Frogman でかいカエル。知識人ぶっている。

Cayke the Cookie Maker クッキー職人。フライパンをなくして探しに行く。珍しくまとも。


12. The Tin Woodman of Oz

 みんな大好きTin WoodmanとScarecrowが旅をするお話。前作最後でも少しだけこの2人の掛け合いが見られたが、今作では1冊たっぷり楽しめる。Polychromeが出てくるが、すっかり成長してまともになっている。

Woot 少年。珍しくバックグラウンドなどが一切説明されずにいきなり出てくる。

Captain Fyter Tin Woodmanのそっくりさん。

Chopfyt ニコイチの人。ろくでなしとして書かれている。


13. The Magic of Oz

ひみつの言葉を使った魔法をめぐるお話。悪役も駆け引きがあってなかなか楽しめる。

Kiki Aru  Hyupの青年。お父さんのメモから魔法を習得

Bini Aru  Kikiのお父さん。失われた先祖の魔法を解き明かす。

Ruggido  元ノームキング。記憶を失ったりしてもやっぱり悪い人として再登場した。典型的な悪い人として作者も使いやすいのだろう。


14. Glinda of Oz

作者Baumさんの最後の作品。いつもチートなOzmaやGlindaが珍しくお手上げ。

Queen Coo-ee-oh Skeezersの女王様 悪い人

Lady Aurex Skeezersの良い人

Ervic  Skeezersの良い人 頭がよく大活躍する

Su-dic  Flatheadの王様 悪い人

Red Reera パワフルYookoohoo 怪物というか魔法使いというか


15. The Royal Book of Oz 

ボームさんが亡くなり、Ruth Plumly Thompsonさんに交代した1作目
Family Tree(家系図)とScarecrowがぶら下がっていたBean PoleのTreeとかけている。こういった言葉遊びがノンネイティブにはわかりづらい。

 Sir Hokus of Pokes 騎士の人

Chang Wang Woe Silver Islandの偉い人

Happy Toko Silver Islandの元奴隷、Scarecrowと仲良し

Comfortable Camel ラクダ Wish Roadで出会った。Karawan Bashiとよく言うが、調べても意味やニュアンスが分からない

Doubtful Dromedary ヒトコブラクダ Wish Roadで出会った 

A-B-Sea Serpent Scarecrowと川で出合った

Rattle Snake Scarecrowと川で出合った



16. Kabumpo in Oz 

Pumperdinkという王国の王子様が象のKabumpoと一緒に嫁を探しに行く話。
作者の好みだと思うけど言葉遊びで辞書に載っていない単語が多いので英語学習者には厳しい。お話自体は前作より面白く、読みやすかった。


Pompadore 王子様。自分がお姫様と結婚しないと国をつぶすと脅されて大変。

Kabumpo 象さん。Elegant Elephantと言われる。

Wag うさぎ。魔法の薬で大きくなる。子音を入れ替えてしゃべる。

Peg Amy 木の人形。魔法の薬で大きくなる。

Ruggedo 悪役として使いやすいのかすごくよく出てくるNome King。

Glegg 魔法使い。Glegg's Box of Mixed Magicという魔法入りの箱を作成。

The Runaway Country 島みたいなのがしゃべったり走ったりする。ついていけない。


17. The Cowardly Lion of Oz


Notta Bit More 主人公のピエロの人 

Bob Up (Bobby Downs) 孤児の男の子

Nickadoodle unの国にいた鳥 魔法使い?

Crunch 岩人間 超問題児。

Mustafa Mudgeの国の王様でトラ好き


18. Grampa in Oz