2019年11月17日日曜日

かんたん大学イモのレシピ

昔のテレビ番組の料理コーナーで紹介されたレシピです。随分、作ったなぁ。感謝です。
<材料>(4人分)
・サツマイモ・・・1本(300g) ・砂糖・・・大さじ4
・ しょう油・・・小さじ1/3
・酢・・・小さじ1/3
・ サラダ油・・・大さじ4 ・ 水・・・少々
・ 黒ゴマ・・・適量
<作り方>
1. サツマイモは一口サイズの乱切りにして水にさらしてアク抜きをしたら、 クッキングペーパーなど で水気をよく拭き取っておく。
2.フライパンにサラダ油、砂糖、しょう油、水、最後に酢を入れ、サツマイモを重ならないように並べ、 フタをして弱火にかける。
3. 2.がフツフツしてから2分加熱したら、フタをあけサツマイモをひっくり返して、 フタの水滴を拭き
取ってから再び2分加熱後、 サツマイモをひっくり返しフタの水滴を取ってからフタをして2分加熱
する。
4. 3.を周りに出来た飴とからめて器に盛り、黒ゴマをふりかければ完成。

2019年11月13日水曜日

市販のカツで簡単カツ丼

鍋にめんつゆ:大さじ4 水:大さじ4を入れて、中火で温める。
玉ねぎ1/8カット、しろネギの青い部分を彩りとしてきざんだもの少々を鍋に投入する。
市販のかつを食べやすい大きさにカットする。
ある程度、玉ねぎが煮えてきたら、カットしたカツを投入する。
生卵を小バチに入れて、かきまぜる。そして、はしを使い、少しずつ、回し入れる。
卵の黄身や白身がいい感じになるまで、待ち、火を止める。

2019年11月10日日曜日

ものマネVBA 最終行の求め方

 これまではこれを使ってたが、
Dim 最終行 As Long
最終行 = Range("A3").End(xlDown).Row + 1
 今は、これだ。
Dim 最終行 As Long
With ActiveSheet.UsedRange
最終行 = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row + 1
 End With
A列全体の最終行を求めるには
Dim 最終行 As Long
With ActiveSheet.UsedRange
最終行 = Range("A:A").EntireColumn.Find("*", , xlFormulas, , xlByRows, xlPrevious).Row + 1
End With
xlDownを使うこれまでの方法だと、行の削除などの操作をすると、ダメなこと=最終行が非常に大きな値になることがあるのだ、 おそらく、マイクロソフトのバグと思われる。

2019年11月8日金曜日

るんるんVBAはモノマネとVBA snippetsで十分だ


/* Rangeは列(column)ファーストで、Cellは行(row)ファースト。Range is column first,cells is row first. */
/* Range is A1 reference style Cells is R1C1 reference style */
Dim str As String
Range("B3").Value="VBAsnippets" ' Range("RowColumn")
str = Range("B3").Value
Debug.Print(str)
Cells(3,2).Value="VBAsnippets"  ' Cells(row, column)
str = Cells(3,2).Value 
/* Debug is print and breakpoint */
Debug.Print(str)

Worksheets("sheet name").Activate
With Worksheets("Sheet6")
    .Activate
    .Range("A1").Value = "VBAsnippets"
    .Range("A1").RowHeight = 20
    .Range("A1").ColumnWidth = 60
End With
With Worksheets("sheet name")
    .Activate
    With .Range("A1")
        .Value = "VBAsnippets"
        .RowHeight = 20
        .ColumnWidth = 60
    End With
End With
Sub AddWorksheet()
    Worksheets.Add After:=Worksheets("sheet x")
End Sub
Sub Testfornext()
    For i = 1 To 10
        Worksheets("sheet name").Cells(i, 1).Value = i
    Next
End Sub
For Each e in obj
  i = i + 1
Next
If  a >= 20 then
  Msgbox "OK"
Else
  Msgbox "NG"
End If
x = 1 
Do Until Cells(x,1).Value = ""
 Cells(x,1).Value = Cells(x,1) * 10
 x = x + 1
Loop
x = 1
Do While Cells(x,1).Value <> ""
 Cells(x,1).Value = Cells(x,1) * 10
 x = x + 1
Loop
'/* how to find the last row = 最終行の求めかた */
Dim 最終行 As Long
'    最終行 = Range("A3").End(xlDown).Row + 1 '
  With ActiveSheet.UsedRange
  最終行 = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row + 1
  End With
' the last day of each Month
    DateSerial(year,month,0)
' VBEの画面を黒画面に変身、クールにせよ!
' VBEのメニューから「ツール」の「オプション」で「エディタの設定」タブにで
'・標準コードに対しフォント:MEIRYO UI 、前景:黄色 背景:黒
'・識別子 前景:白、背景:黒
'・キワード 前景:水色、背景:黒
'・コメント 前景:グレー、背景:黒
' how to use Autofilter
 Sub Macro1()
  With Worksheets("Sheet1")
    .Range("A1").AutoFilter _
      Field:=3, Criteria1:=">=100"
  End With
 End Sub
' Methos for cells
 Cells.ClearContents   'Clear all the cells without format
 Cells.Delete          'Delete all the cells
' Methods for Workbooks Worksheets
 Workbooks.Add
 Worksheets.Add
 Workbooks("Book1.xlsm").Save
 ActiveWorkbook.SaveAs("D:\sample.xlsm")
 ActiveWorkBook.SaveAs Filename := "d:\sample.xlsm"
 ActiveWorkbook.Close
 WorkBooks.Open Filename := "d:\sample.xlsm"
 Worksheets(1).Activate
 Worksheets(2).Select
 Worksheets("Sheet1").Copy After := Worksheets("Sheet2")
 Worksheets("Sheet1").Move After := Worksheets("Sheet2")
 Worksheets("Sheet2").Delete
' camelCaseNotation
 RowNumber-> rowNum  
 ColumnNumber-> colNum
' SnakeNotation
 Row_Number->Row_Num
' how to use count property
 Workbooks.count finds the current Workbooks
' how to use count prperty example
Sub CommandButton1_Click()
Dim filePath As String
Dim saveFileName String
    filePath = ThisWorkbook.Path
    saveFileName = "Save" & Year(date) & Month(Date) & Day(Date)
    Worksheets("Terget").Copy
    Workbooks(Workbooks.count).SaveAs _
    filename:=filePath & "\" & saveFileName,FileFormat:=xlCSV, CreateBackup:=False
    Workbooks(Worrkbooks.count).Close
End Sub
/* to use EXCEL provided WorksheeteFunctions
 Range("A1") = Application.WorksheetFunction.Sum(Range("A1:A10"))

2019年10月9日水曜日

azdraingとazpainterに出会う

hei jia jia
hei jiajia (powered by azdrawing + azpainter)

 azdrawingとazpainterというlinuxのフリーソフトに出会い、ソースコードをダウンロード、コンパイル+インストールしてみた。凄いのでは?ホント、書きやすいし、素早い。いいね、このフリーソフト。無駄なものがない感じ。世の中に未だ未だ知らんこと、多い。
  久しぶりに映画館へ出かけ、「蜜蜂と遠雷」を
観た。原作を読んでいたので、こんな曲を弾いていたんだなぁと。小説は、読む人により、頭に描かれる映像が異なる。映画は原作とは異なる作り手のヴァージョンの映像になる。

2019年10月8日火曜日

apple superdriveをlinuxで使う

  apple superdriveをlinuxで使うためには、 Googleでググると、ターミナルでsg_raw /dev/sr0 EA 00 00 00 00 00 01と打てばよいとわかる。ただし、sg3_utilsというパッケージが必要だ。

2019年10月7日月曜日

BionicPup32をFrugalインストール

girl20191007 Vivid Puppyでいいんだけど、もはやパッケージ更新ができないので、BionicPup32をFrugalインストールしてみた。いい感じ。使えるなぁ。 さすが、puppyだ。重たくない。仕事ではマイクロソフトのワードやエクセルを仕事の相手が指定してくるので、マイクロソフトのWindowsを 使わざるを得ない。しかし、本当はLinuxで同じ仕事がWindwosのGUIよりも効率良くできることを多くの人が知らないと思う。残念だ。もっと、正確に言えば、見栄がする立派なGUI画面ではなく、コマンドをひたすら打ち込むCUIベースが断然、早い。なぜなら、GUIの処理が必要ないからだ。
 最近、上田隆一さんの「シェル芸」に大はまり、本を2冊も買ってしまった。1つめは、「シェルスクリプト高速開発手法入門」(改訂2版)で 「フルスクラッチから1日でCMSを作る」と銘打たれている。多分に読み手のスキルに依存すると思われるが、ここまで言いきるところが小気味いい。 凄い本。もう1つは、「シェルプログラミング実用テクニック」。こちらには「UNIX/Linux流のグラミング手法を習得する」 という帯文が付いている。こちらも凄い本だ。ワタシはこの2冊目にヤラレた。前々から自分が思ってというか、感じていたつーか、そんなことを見事にかつ大胆に文章にされていたのだった。今後、じっくりと読みたい。魔法のワンラインの連続。いいですね。  
 先日、「宮部みゆき全1冊」という本を読んだ。ローレンス・ブロックの「おかしなことを聞くね」というアンソロジーが取り上げられていた。 短篇でも凄いミステリーがある。そうなんですよと。うれしくなったなぁ。

2019年9月11日水曜日

Vivid Puppy Linuxの無線LANが復活。DebianやMX Linuxはやっぱ、重たすぎる。FMV BIBLO NB50Sには。

ここ数日、Debian10(buster)ヤMX Linux 18.3をUSBにいれてみたが、ワタシのFMV-BIBLO NB50Sには重た過ぎる。両方ともとても素晴らしいのだが、パシンパワーがそれなりに必要なため、非力なマシンではサクサクと使えない。それに引換え、vivid puppy linuxは軽快だ。引越しのせいでADSL環境が貧弱となり、wan接続が失敗していたのだが、このところのdebianとMX linuxのインストールで、経験したことが閃いた。
「なぜ、つながらないのか、調べたのか」ということだ。「悩んだときには、いろいろ、試すのも良いが、まずは何が悪いのかを突き止める。これが成否を分けるのだ。」
 そこで、早速、端末でdmesg | grep ath5kと叩くと、
ath5k can't disable ASPM; OS doesn't have ASPM control
というメッセージがでていた。 このトラブルはどうすればいいのか、すでにググってみて、わかっているのだ。つまり、
rmmod ath5k
modprobe ath5k nohwcrypt=1 no_hw_rfkill_switch=1
とすればよいのだと。。 早速、やってみたところ、見事に繋がったのだった。 あとは、これを/etc/modprobe.dにつくってあげればよい。
options ath5k nohwcrypt=1 no_hw_rfkill_switch=1
という行を適当な名前のxxxxx.conf(xxxxxはなんでもいい)に作ってあげればいい。 或いはワンライナーのワタシはrootでログインし、次のコマンドを打つ。
echo "options ath5k nohwcrypt=1 no_hw_rfkill_switch=1" > /etc/modprobe.d/ath5k.conf
anth5kでつながらない事象で、ACPMに関するエラーがでていたら、上記の回避策をトライしてみてください。


米澤 穂信(よねざわ ほのぶ)の「王とサーカス」を読んだ。
girl201909-2
girl2019 September
しばし、見知らぬ土地、ネパールのカトマンズの街を旅した。珍しい食べ物を食した気分に浸れた。機会があれば、ぜひチヤを試してみたい。また、心に残ったフレーズがあったので自分のために残しておく。カトマンズでの事件を取材するフリーライターの太刀洗 万智(タチアライ マチ)にラジェスワル准尉が詰め寄ったときの言葉だ。176ページにある。「それは本当に悲しんでいるのではなく、悲劇を消費しているのだと考えたことはないか?」「飽きられる前に次の悲劇を供給しなければならないと考えたことは?」「お前はサーカスの座長だ。お前の書くものはサーカスの演し物(だしもの)だ。」

「あとがき」にもメモしておきたい言葉があった。
「たった一つの知識が物の見方を根底から覆し別の知識が更なる修正を加えていく。やがて、蓄積された知識はお互いに矛盾しない妥当だけれど思いがけない物の見方へと収束していく。」

2019年9月2日月曜日

deban 10 xfce + FMV BIBLO NB50S で音がでないのを解決したよ

Debian10をFMV-BIBLO(NBS50S)にインストールしたところ、headphoneからは音が出るのにspeakerから音がでないという摩訶不思議な現象が起きていた。
解決方法は、/etc/modprobe.dにsnd-hda-intel.confを作り、options snd-hda-intel model=genericという「おまじない」を書いて、リブートするだけだ。
ワンライナーでやるなら、端末で
echo "options snd-hda-intel model=generic" > /etc/modprobe.d/snd-hda-intel.conf
と打ち、rebootだ。file名のsnd-hda-intelは何でもOKだよ。 ちなみに、model=fujitsuやmodel=autoではうまくいかなかったんだよなー。ここに到達するまでに3日かかった。 また、pluseaudioはちと重たいので、removeして、ALSAでやっている。

ここで、一息のコーナー。乃南アサの「六月の雪」を読んだ。まるで、しばし、台南を旅した気分に浸った。とても心に響いたフレーズがあったので自分のために残しておく。 460から461ページにある。現地の人に助けられ、祖母の故郷の旅を続ける未來が「一瞬、一瞬が過去になっていくんだなって。今、この時間も」と悲嘆するのに対し、老師(ラオスー)の林(リー)先生が返す。「しかし、過去になりますが、それが心に生きてある間は出来事も人も死にません。そこに必ずこの先の未来につながることが出てくると思いますね」と返していた。心の中で人は生きる。生きつづけることができる。忘れない限り。思い出せる限り。

2019年8月29日木曜日

debian10 xfce+FMV-BIBLO NB50S+ath5kで無線LAN接続できたよ

もうすぐ15、6年使用している我が家のFMV-BIBLO NB50Sに軽量LinuxのDebian10 (buster)のxfce版をを入れてみた。使用したisoイメージはdebian-10.0.0-i386-xfce-CD-1.isoだ。これをCDに焼く。そして、USBにインストール。動かしてみた。ところが、無線LANが接続できない。ドライバーはath5kだ。パラメタをい闇雲に色々変えてみたが、やっぱ、繋がらない。こういうときは、何がマズイのか、原点に立ち戻るのがいい。つまり、どんなエラーがおきているのか、エラーメッセージを探すのだ。このアプローチがとれるか、これこそがとても重要だ。
そこで、端末でdmesg | grep ath5kと叩くと、
ath5k can't disable ASPM; OS doesn't have ASPM control
というメッセージがでていた。 このトラブルはどうすればいいのか、ググってみると、
rmmod ath5k
modprobe ath5k nohwcrypt=1 no_hw_rfkill_switch=1
とすればよいと出てきた。 早速、やってみたところ、見事に繋がったのだった。 あとは、これを/etc/modprobe.dにつくってあげればよい。
options ath5k nohwcrypt=1 no_hw_rfkill_switch=1
という行を適当な名前のxxxxx.confに作ってあげればいい。 或いは次のワンラインコマンドでもOKだ。
echo "options ath5k nohwcrypt=1 no_hw_rfkill_switch=1" > /etc/modprobe.d/ath5k.conf
debianのanth5kでつながらない事象で、ACPMに関するエラーがでていたら、上記の回避策をトライしてみてください。
このような謎解きがlinux インストーラーには楽しみだ。

2019年7月6日土曜日

ふるさとの薩摩揚げの謎

nobagplease    ふるさとに帰ると必ず、「薩摩揚げ」を馴染みのスーパーで買っている。市販の大手のとは全く別物でふわっとやさしい揚げたての、魚の風味が香る、少し甘口だが、とても美味いのだ。しかし、「アタリ」「ハズレ」があり、とても美味しいときもあれば、そうでないときもあり、不思議に思っていた。そして、前回帰った時におじさんと偶然、その話になり、謎が解けた。
   その店は故郷で数店舗を経営する、牧場もあるスーパーなのだが、さつまあげのネタは作り置きをするのだという。
   つまり、作りたてを揚げたときには、とてもおいしい。作りたけではなく、2日めのものだと魚のくさみが出てしまう。これがおいしさを損なっているらしい。さらに、店舗により、材料や味付けの仕方が違うので、味が変わるのだという。次回は別の店のも買ってみよう。
  なるほど、地元民(ローカル)ならではの情報だ。

2019年7月5日金曜日

夜盗虫( YO-TO-U-MU-SHI : cutworm )との戦い-A battle with cutworms

  今年も知らぬ間にベランダ菜園に大葉が生えてきた。以前、植えていたものが花を咲かせ、タネをアチコチにばらまいていたのだ。採り立ての大葉は、新鮮でとてもおいしい。ところが、ある朝、無残に食べられていた。ネットで調べると、夜盗虫(よとうむし)--cutwormの仕業。
  そこで、正倉院のネズミ返しを思いついた。その応用で、自作の「よとうむしがえし」を作成してみた。牛乳パックのようなものなら何でもいいのだが、ブルガリアヨーグルトの容器をハサミで円形に切る。真ん中までハサミをいれ、茎にはさまる余地をくり抜き、大葉の茎に刺す。これで完成だ。この「よとうむしがえし」を取り付けたら、その後、食べられなくなった。
 しばらく、様子をみよう!
そして、3週間経つ。夜盗虫の被害はない。やっぱ、「夜盗虫返し」ですよ。



2019年7月2日火曜日

ものマネVBAで家計簿~その3 ピボットで収支管理 これでバッチグー!

EXCEL VBAで作成した「おれの家計簿」では、毎月の収支をピボットで確認する。
ピボットについては、仕事で覚えたEXCEL ピボット(PIVOT)でクロス集計するを見てくれ。ひとつめのピボットは月別に費目ごとの金額を表すものだ。
pivot1
ビボット

 



 
 

















  ふたつめのピボットは費目別の金額を年別(年月日をグループ化で年にまとめておく)に表すものだ。

ピボット2
























 そのため、常にピボットを更新するコードを必要に応じて、いろんな箇所に書いておいた。 それもイチから作るのは面倒いので、マクロ記録で「家計簿シート」の行を選択し、ピボットテーブル更新までを記録したものを利用している。ただし、出来上がったコードのうち、今の最終行を「最終行」という変数にしておく必要がある。なお、ピボットテーブル自身は1回しか作らないので、コード化せず、手作りしたものをつかっている。
'ピボットを自動更新'
Worksheets("ピボット").PivotTables("ピボットテーブル1").SourceData = "家計簿!R2C1:R" & 最終行 & "C7"
Worksheets("ピボット2").PivotTables("ピボットテーブル1").SourceData = "家計簿!R2C1:R" & 最終行 & "C7"
Worksheets("ピボット").PivotTables("ピボットテーブル1").RefreshTable
Worksheets("ピボット2").PivotTables("ピボットテーブル1").RefreshTable

2019年6月28日金曜日

モノまねVBAで家計簿を作る〜その2 ユーザフォームでデータ入力する

  EXCEL VBAで作る「オレの家計簿」(別名、家計簿じゃが)は
  • シートの1行を「1件のお買い物(支出)」や「1件の収入」に対応づける。
  豪華なメニュー画面はなく、家計簿シートの先頭2行に「データ入力」、「ピボットシート更新」、「毎月支払」という3つのボタンを配置しただけの物凄くシンプルなものだ。   その作り方は、以下の通りだ。
  1. まずは、VBAのコントロールを利用し、ユーザフォームを作る。
  2. そして、そのフォームからデータ入力をするところをVBAで書く。それだけだ。
  ユーザフォームを作るには、EXCELメニューの「開発」タブから、「Visual Basic」タブをクリックし、「挿入」タブから「ユーザーフォーム」を選択する。すると、Userform1という名前でユーザーフォームが追加されるので、ここにテキストボックスだの、ボタンだのを追加していくわけだ。
初めてやる場合、ここら辺は非常にわかりにく大変な作業になる。ネットを駆使して、頑張って作ろう!
  • UserForm1のタイトルバー(Caption)は「家計簿への入力」としておこう。
  • 「内容」というフィールドはテキストボックスで作る。変数名はTEXTBOX1とする。
  • 「金額」というフィールドはテキストボックスで作る。変数名はTEXTBOX2とする。
  • 「年月日」というフィールドはテキストボックスで作る。変数名はTEXTBOX3とする。日付の増減のためにスピンボタンを追加しよう。
  • 「種別」というフィールドはラジオボタンで、支出と収入を選択できるようにしよう。
  • 「クレジットカード支払」というチェックボックスを作ろう。変数名はCheckBox1とする。
  • 「登録」というコマンドボタンを作り、変数名はCommandButton1とする。「登録」ボタンがクリックされたら、UserForm1で指定された「年月日」、「内容」、「費目」、「費目コード」、「金額」、「クレジット支払(フラグ)」がEXCELの「家計簿」というシートの最終行の次行のそれぞれのフィールドとして追加されるようなコードを書いておく。
UserForm1
UserForm1










  これがメインとなるコードだ。最終行の求め方はEXCELのバージョンによる影響があり、その度に見直している。今はこれがいいようだ。ネットの師匠に聞いたのだ。つまり、マネしてみだ。というか、コピペだ。
Dim 最終行 As Long
Sub CommandButton1_Click()
    Sheets("家計簿").Select
'    最終行 = Range("A3").End(xlDown).Row + 1 '
     With ActiveSheet.UsedRange
       最終行 = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row + 1
     End With
    If ComboBox1 = "" Then
      MsgBox "費目名が入っちょらんどー。"
      Exit Sub
    End If
    If TextBox2 = "" Then
      MsgBox "金額が入っちょらんどー。"
      Exit Sub
    End If
    Sheets("家計簿").Range("B" & 最終行).Value = TextBox1.Value
    Sheets("家計簿").Range("A" & 最終行).Value = TextBox3.Value
    Sheets("家計簿").Range("A" & 最終行).NumberFormatLocal = "yyyy/mm/dd ddd"
    If OptionButton1 Then '支出の場合'
      Sheets("家計簿").Range("F" & 最終行).Value = TextBox2.Value
      Sheets("家計簿").Range("E" & 最終行).Value = ""
    Else                  '収入の場合'
      Sheets("家計簿").Range("E" & 最終行).Value = TextBox2.Value
      Sheets("家計簿").Range("F" & 最終行).Value = ""
    End If
    If CheckBox1.Value Then
      Sheets("家計簿").Range("G" & 最終行).Value = 1
    Else
      Sheets("家計簿").Range("G" & 最終行).Value = 0
    End If
    Sheets("家計簿").Range("D" & 最終行).Value = ComboBox1.Value
    If OptionButton1 Then '支出の場合'
      Select Case ComboBox1
      Case "食費"
        Sheets("家計簿").Range("C" & 最終行).Value = 1201
      Case "住居"
        Sheets("家計簿").Range("C" & 最終行).Value = 1202
      Case "光熱・水道"
        Sheets("家計簿").Range("C" & 最終行).Value = 1203
      Case "被服"
        Sheets("家計簿").Range("C" & 最終行).Value = 1204
      Case "保健・医療"
        Sheets("家計簿").Range("C" & 最終行).Value = 1205
      Case "教育"
        Sheets("家計簿").Range("C" & 最終行).Value = 1206
      Case "教養・娯楽"
        Sheets("家計簿").Range("C" & 最終行).Value = 1207
      Case "交際"
        Sheets("家計簿").Range("C" & 最終行).Value = 1208
      Case "交通・通信"
        Sheets("家計簿").Range("C" & 最終行).Value = 1209
      Case "貯蓄"
        Sheets("家計簿").Range("C" & 最終行).Value = 1210
      Case "保険"
        Sheets("家計簿").Range("C" & 最終行).Value = 1211
      Case "税金"
        Sheets("家計簿").Range("C" & 最終行).Value = 1212
      Case "その他"
        Sheets("家計簿").Range("C" & 最終行).Value = 1213
      Case "定期代"
        Sheets("家計簿").Range("C" & 最終行).Value = 1214
      Case "薬代"
        Sheets("家計簿").Range("C" & 最終行).Value = 1215
      End Select
    Else '支出の場合'
      Select Case ComboBox1
      Case "給与"
        Sheets("家計簿").Range("C" & 最終行).Value = 1101
      Case "賞与"
        Sheets("家計簿").Range("C" & 最終行).Value = 1102
      Case "年金"
        Sheets("家計簿").Range("C" & 最終行).Value = 1103
      Case "雑収入"
        Sheets("家計簿").Range("C" & 最終行).Value = 1104
      Case "その他"
        Sheets("家計簿").Range("C" & 最終行).Value = 1105
      Case "前月繰越"
        Sheets("家計簿").Range("C" & 最終行).Value = 1106
      Case "パート代"
        Sheets("家計簿").Range("C" & 最終行).Value = 1107
      Case "アルバイト代"
        Sheets("家計簿").Range("C" & 最終行).Value = 1108
      End Select
    End If
' ピボットを自動更新'
    Worksheets("ピボット").PivotTables("ピボットテーブル1").SourceData = "家計簿!R2C1:R" & 最終行 & "C7"
    Worksheets("ピボット2").PivotTables("ピボットテーブル1").SourceData = "家計簿!R2C1:R" & 最終行 & "C7"
    Worksheets("ピボット").PivotTables("ピボットテーブル1").RefreshTable
    Worksheets("ピボット2").PivotTables("ピボットテーブル1").RefreshTable
' 月日で並べ替え'
    Call sort_by_date
End Sub
家計簿というシートに支出や収入を1件ずつ、追加していくのだが、追加される度に日付で昇順になるようにコードを書いておく。
Sub sort_by_date()
    Dim 最終行 As Long
    Sheets("家計簿").Select
 '   最終行 = Range("A3").End(xlDown).Row
    With ActiveSheet.UsedRange
      最終行 = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
    End With
    Range("A2:G" & 最終行).Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        SortMethod:=xlPinYin, DataOption1:=xlSortNormal
End Sub
支出と収入のラジオボタンがクリックされたら、それぞれに応じた費目がコンボボックスのリストに出るようにしておく。こんな感じだ。
Sub OptionButton1_Click()
  OptionButton2.Value = False
  OptionButton1.Value = True
  ComboBox1.List = Array("食費", "住居", "光熱・水道", "被服", "保健・医療", "教育", "教養・娯楽", "交際", "交通・通信", "貯蓄", "保険", "税金", "その他", "定期代", "薬代")
End Sub
Sub OptionButton2_Click()
  OptionButton1.Value = False
  OptionButton2.Value = True
  ComboBox1.List = Array("給与", "賞与", "年金", "雑収入", "その他", "前月繰越", "パート代", "アルバイト代")
End Sub


これは年月日の増減を行うスピンボタンのコードだ。
Sub SpinButton1_SpinDown()
  TextBox3.Value = CDate(TextBox3.Value) + 1
End Sub
Sub SpinButton1_SpinUp()
  TextBox3.Value = CDate(TextBox3.Value) - 1
End Sub
UserForm1が呼び出されたら、今日の日付と費目のリストをセットしておく。
Sub UserForm_Initialize()
  TextBox3.Value = FormatDateTime(Date, vbShortDate)
  If OptionButton1 Then '支出の場合'
    ComboBox1.List = Array("食費", "住居", "光熱・水道", "被服", "保健・医療", "教育", "教養・娯楽", "交際", "交通・通信", "貯蓄", "保険", "税金", "その他", "定期代", "薬代")
  Else '収入の場合
    ComboBox1.List = Array("給与", "賞与", "雑収入", "その他", "前月繰越", "パート代", "アルバイト代")
  End If
End Sub
これがおれの家計簿だ。
oreno-kakeibo-menu
oreno-kakeibo-menu



















  EXCELシートの「家計簿」でユーザフォームUserForm1を呼出すには「データ入力」というボタンを作り、以下のコードを標準モジュールに記述し、myform1をマクロ登録で記述すれば良い。これで「オレの家計簿」の完成た。
Sub myform1()
    Dim 最終行 As Long
    UserForm1.Show (vbModeless)
    Sheets("家計簿").Select
End Sub
  毎月支払というボタンには、毎月支払というシートにあらかじめ作成した項目を一括追加するVBAコードをマクロ登録する。
Private Sub 毎月支払()
    Dim 最終行 As Long
    Sheets("毎月支払").Select
   '最終行 = Range("B1").End(xlDown).Row
    With ActiveSheet.UsedRange
      最終行 = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
    End With
    Rows("2:" & 最終行).Select
    Selection.Copy
    Sheets("家計簿").Select
    '最終行 = Range("A3").End(xlDown).Row + 1
    With ActiveSheet.UsedRange
      最終行 = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row + 1
    End With
    ret = MsgBox("まこち、追加すっとか?(ctrl+zでん、元に戻らんどー)", vbYesNo)
    Select Case ret
    Case vbYes
      '処理を継続します
    Case vbNo
      '処理を終了します
      Exit Sub
    End Select
    Rows(最終行 & ":" & 最終行).Select
'    Selection.Insert Shift:=xlDown
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
' ピボットを自動更新
    Worksheets("ピボット").PivotTables("ピボットテーブル1").SourceData = "家計簿!R2C1:R" & 最終行 & "C7"
    Worksheets("ピボット2").PivotTables("ピボットテーブル1").SourceData = "家計簿!R2C1:R" & 最終行 & "C7"
    Worksheets("ピボット").PivotTables("ピボットテーブル1").RefreshTable
    Worksheets("ピボット2").PivotTables("ピボットテーブル1").RefreshTable
' 月日で並べ替え
    Call sort_by_date
End Sub
  毎月のデータを手作りで2つのピボットテーブルにしてみた。これで、収支管理はバッチリだ。そして、ピボットテーブルを最新化するコードは以下のとおり。これも使いやすくするため、ボタンでマクロ登録しておく。
Sub Update_Pivot_area()
    Sheets("家計簿").Select
    '最終行 = Range("A3").End(xlDown).Row
    With ActiveSheet.UsedRange
      最終行 = .Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
    End With
    Worksheets("ピボット").PivotTables("ピボットテーブル1").SourceData = "家計簿!R2C1:R" & 最終行 & "C7"
    Worksheets("ピボット2").PivotTables("ピボットテーブル1").SourceData = "家計簿!R2C1:R" & 最終行 & "C7"
    Worksheets("ピボット").PivotTables("ピボットテーブル1").RefreshTable
    Worksheets("ピボット2").PivotTables("ピボットテーブル1").RefreshTable
End Sub

るんるんモノマネEXCEL VBA 本〜仕事で覚えたEXCEL&VBA小技 BOOK〜 キモの関数、そしてIEを自在に操るVBA。初めはモノマネが一番いい!に戻る

2019年6月27日木曜日

モノまねVBAで家計簿〜まずは、キホン設計!

  イチからすべて、考えるのは難しい。そこで、他人のコードをみてマネして習得する、「モノまねVBA」がいい。そのモノまねVBAを駆使してアプリを作る最初のステップは、基本設計をどうするかだ。即ち、どんな使い勝手のソフトにするかだ。基本設計のポイントとしてば、以下の3つとする。
  • EXCELシートの1行で1件の支出または収入を表す。 
  • その1行の項目は7つー日付、内容、費目コード 、費目、収入金額、支出金額、クレジット有無フラグだ。これらの項目を入力フォームで指定し、登録ボタンでシートへ追加する。費目はプルメニューにして、費目コード は自動で入るようにする。
  • この1行の項目の要素、費目コードと費目も、金融広報中央委員会がかつて無償で提供していた幻の「みんなの家計簿」から引用させて頂く。1から考えるのは大変なので。
 
Moreno-kakeibo
oreno-kakeibo

  あとは、ひたすらコーディングだ。
 
  ここでチョット一息のコーナーだ。
small eyes
small eyes
  或る土曜日、街の名を冠したバルに出掛けた。小規模でかつ参加店が少ないため、人気の店には多くの客が長蛇の列。なんとかキャパのある店に滑り込め、少し腹ごしらえできた。殆どの店で客の数が店のキャパを超えている。これではタマラン。そこで、近くのコンビニやスーパー、パン屋で缶チュウハイ、紅茶、ボローニアサンドイッチを買い込み、川の土手で「勝手にバル」。川からのそよ風が心地良かった。こりゃ、いつでもバルはできるんだね。

2019年2月4日月曜日

zenfone5+OCNモバイルONEで格安スマホ

2019girl
  日本では、都会は別として、地方では繁華街でさえも電話ボックスを探してもなかなか見つけることができなくなってきた。もう、駅ぐらいしか、見当たらない。やむをえず、スマホとして、ASUSのzenhoneを購入。SIMカードはOCNモバイルONE 音声通話を選んでみた。
 zenhone、OCNのSIMカードもインターネットで購入。電話ができるようになるまでの手続きは、すべて、インターネット。自分でやらないといけないので、大変だったけど、わからないときは、日中なら、コールセンターが電話対応してくれたので、大丈夫だった。
 最近、読んだ宮部みゆきの「模倣犯」。「ごく普通の人のごく普通の言葉、態度、生き方の在りように、いずまいを正さずにはいられないような気持ちになることもある。」
(摸倣犯上巻 p240)豆腐屋の義男さん。こういう人物が登場すると物語がグーッと深くなるというか、ピリッとしまる。さすがです。凄い。うますぎる。ところで、犯人の描写ではロバート・マキャモンみたいな「ホラー」を感じた。