なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

VBAでExcelのセル内の文字列置換

f:id:nazuna_0124:20170403224602p:plain

悩んでいるブログの方向性のひとつに

職業訓練で習ってない、関係もあまりない内容を書いてよいかがあります。

ブログのタイトルがタイトルだけに……。


VBAならいっぱいネタがあるのですけれども。

選択肢はこんなかんじ。


  • 気にせず書く
  • もう一つブログを作る
  • ブログのタイトルをIT雑記系に変更しちゃう


あまり深入りしない程度に気になったのだけ、とりあえず書いてみます。


akashi-keirin.hatenablog.com


今回はこちらのお題に便乗させていただきます。

記載されてるコードがよくわからなくて悔しかったので

わたしならどう作るかなーって考えてみました。


動作はこんなかんじ

クリックした瞬間に(*)がぶっ飛んでちょっとした感動があります。


f:id:nazuna_0124:20170409112911g:plain


思いついた(思い出した)方法は2つです。

InStrで"(“の場所を特定。Left関数で抽出(こっちは複数かっこに対応できません)

Replaceメソッドワイルドカードを利用。


gifの動作はreplaceのほうです。


コードはこちら

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim obj
    
    For Each obj In Selection
    
    ''Replaceメソッドを使う--------
       obj.Replace what:="(*)", Replacement:=""
    ''----------------------------

    ''InStrを使う------------------
        'ifで分岐しないとエラーでます。
        'If InStr(obj.Value, "(") > 0 Then
            'obj.Value = Left(obj.Value, InStr(obj.Value, "(") - 1)
        'End If
    ''------------------------------
    Next
    
End Sub


Sheet1を右クリック>コード表示>WorksheetをSelectionChange

ここに貼り付けると利用できます。(シートのとこに全コピーでもおっけー)


すぐ思いついたのはInStrですねー。そして、存在しないとエラー出すのをわすれて

あわててifを付け足しました


Replaceの注意点は、Replace関数はワイルドカード使えません

RangeオブジェのReplaceメソッドは使えます。


ぉぉぉ! 昔はこの説明じゃ何いってるかわからなかった!

Rangeクラス(オブジェクト?)メソッドを作った人に感謝!とか言えてしまいます。


1行で済みますし、なんかかっこいいのですが、

引数がいっぱいあって正直よくわかりません


gifのとおり動作がなんとなく気持ちいいです。

VBAerが魔法使いのように思われる所以ですね!

PHPとJAVAを習ったばかりの初心者がJSちゃんからの問題を見て

f:id:nazuna_0124:20170327183448p:plain

適当にWeb回ってると広告で出ますよね。

f:id:nazuna_0124:20170408200420j:plain

これです。10?って脊椎反射した人ー?


それはともかく、これを見たときのPHPerの反応としては、


小数点の演算結果を比較してる時点でだめ、やりなおし

で、おっけーですか?


リンクはこちらです。

PHP: 浮動小数点数 - Manual


小数点は近似値(この表現でいい?)だから計算結果ずれる時あるから気をつけてね。

とゆー、プログラム全体の注意点ですが…そういえば習ったことないかも


0除算と並んで平均とか出すときに一緒に覚えてもよさげな知識です。


0.7+0.1==0.8 がfalse返ってくるのが有名です。


実際どうなってるのかPHPで表示しようとしてあきらめました

もしかして無理???


習ったばかりのJAVAさんに頼ることに。

public class Main{
    public static void main(String[] args) {
        double i = 0;
        int cnt =0;
        
        while(i<1){
            i += 0.1;
           System.out.println(i);
        }
    }
}


出力結果

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999


こちらは一目りょーぜん!10回やっても1になってないのですねー。


あ、なんでこうなるかの詳しい説明はいいです。

小数点使うときには気をつけよー or 計算結果が合わない時は小数点疑え でおっけー。


こーゆう、うっすら覚えとくと困ったときに役立つ知識は

ループ処理で同じ説明3回もする余裕あるなら

授業に取り入れてもいいんじゃないかなーって思います。

職業訓練の授業59日目~配列2日目、メソッド~

f:id:nazuna_0124:20170303232129p:plain

うっかり寝落ちしてしまってからの、朝更新。

皆様おはよーございます!


どういうわけか、最近はわからねーと怨嗟の声が聞こえてきます。

今までで一番いい先生のはずなのですが…


昨日もちょっと愚痴りました Javaの授業から席替えが行われてます。

テストをの点数を基準にグループわけしたときに点数が同じくらいになるように、


また、高い人と低い人が隣り合うように変わりました。


結果どうなったかというと、JavaのForループの説明であれば

Jsと比べてvar宣言がint宣言になっただけと言われればわかる人と


もう1回ループの書き方を一から説明されても、まだわからない人が隣同士です。


席替えぷりーず


さて、本日(昨日)はループの応用問題です。

二重ループ、foreach、なんかから出題。


その中で配列を逆順にして格納しなさいって問題がありました。


public class Main{
    public static void main(String[] args) {
        int[] a = {10,20,30,40,50};
        int[] b = new int[5];
        
        for (int i=0;i<a.length;i++){
            b[b.length-1-i] = a[i];
        }
        
        for(int num:b){
            System.out.println(num);
        }
        
    }
}

先生の解答はこちら。


この問題のキーは当然、逆にするアルゴリズムです。

んで、授業では一度も言われてないことなのですが、


1回で出来ないなら、出来る範囲を少しずつ応用していく作り方です。


たしかに、このくらいは1回で書けたほうがよいのですが、

できないことは仕方ないので出来るところまで戻ってから直す手法です。


具体的にどういうことかといいます。逆順以前に配列aのループが回せないと話にならんのです。


public class Main1{
    public static void main(String[] args) {
        int[] a = {10,20,30,40,50};
        int[] b = new int[5];
        
        for (int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
       
    }
}

これがきちんと動くことを確認してから逆順にする手順を考えましょう。


public class Main11{
    public static void main(String[] args) {
        int[] a = {10,20,30,40,50};
        int[] b = new int[5];
        
        for (int i=0;i<a.length;i++){
            b[i] = a[i];
        }
        
        for(int num :b){
            System.out.println(num);
        }
    }
}


正順では格納できてることを確かめます。

ここまで出来てれば、ループはわかってるけど、アルゴリズムがわかんない


のだと確認が取れます。ここまで来ないのであれば基本からやり直しです。


全部聞くのと、出来るところまでやって質問するのでは

大きく違います。


それをするには、こういう手法のほうが適してるので是非覚えてほしーです。


プラス。この手の問題なのですが、別にカウント変数を用意するのを

覚えておくと便利です。

public class Main11{
    public static void main(String[] args) {
        int[] a = {10,20,30,40,50};
        int[] b = new int[5];
        
        int cnt = b.length-1;
        
        for (int i=0;i<a.length;i++){
            b[cnt] = a[i];
            
            cnt--;
        }
        
        for(int num :b){
            System.out.println(num);
        }

    }
}

スマートなやり方ではないことが多いですが、大抵臨んだ出力は出ます!



話は変わりまして、配列は参照だから、a=bなんてやってから

b書き換えると、aから見ても変わってるよーの話がありました。


javaのいつものはまりぱたーんです。


つづいてメソッド。どうもこのあたり用語がわかりにくいです。

メソッドのメリットとして挙げられたのが下記です。

  • 機能別にわけるのでプログラム全体の見通しがよくなる。
  • 修正箇所が少なくてすむ
  • 何度も書かないので効率があがる


これってモジュール化のメリットでは???

違う意味なのか、javaだから言い方が違うのか… むずかしいです。


12日間予定のjava基礎の授業、最後にはゲームっぽいものを作る予定だとか。

それを楽しみにすすめてみます!

職業訓練の授業58日目~制御構造、ループ~

f:id:nazuna_0124:20170406201732p:plain

訓練に通い始めて3ヶ月。たぶんあなたは3言語目だと思うから


ループ処理なんかは違いを教えてくれるだけでいいかなーって言いたかったのに

まだ慣れてない方もいるので授業の進行としては正しい様子。


ただ、さすがにわたしから、かけてあげられる言葉はないかなーって。。。

ガンバッ


eclipseで急にfontが小さくなったお隣さんから、聞かれたのだけど

わたしが使ってるのはNetbenasなのでよくわかりません!


というわけで、PHPとjsがきっと影で泣いてるJavaの授業2日目です。


先生の専攻は数学だからなのか、非常に細かく丁寧に教えてくれてます。

とにかくソースを書いてもらうのがモットーで問題も多い。


だけど、理解度はあまり変わってない。。。なぜ!?


もしかすると、解答を教えるのが早すぎて、つい写経だけして終わってるのかもしれません。


こと制御系に関してだけは、時間かかっても自分でやったほうがよいのかも。


本日のメインはJava定番のハマりパターン 文字列の==比較です。


普通に演算子で比較しちゃだめよーというもの。個人的には定番すぎて逆にはまらないパターン。


どちらかというと、Javaはとりあえずクラス呼ぶのにimportしないとだめにはまりました。


Javaさん、あなたには失望しました。 日時取得するだけで

java.util.Dateに頼らなきゃできないなんて……。


Date d = new Date();

こう書いたらエラーでたわよ!?


尚、Netbeansではシンボルを見つけられませんとゆー

とても不親切なエラーが出ます。


右クリック>インポートを修正でおっけーです。


もしかしてJavaさんはクラス、ライブラリでなんでもできるけど、

ないとなんにもできない???


なんとかてなづけるべく、もう少し見守っていきます!

職業訓練の授業57日目~Javaの初歩、eclipseの導入~

f:id:nazuna_0124:20170303232129p:plain

皆さんはJAVAにどんなイメージありますか?


わたしとしてはPHPがJPOPならバッハのイメージです。


なんかこう重苦しい雰囲気。恐ろしく取っ付きが悪いです。


さて本日から後半戦がスタート。JAVAのスタートです。


Eclipseのダウンロードに2時間近くかかるため、

おきまりのコマンドプロンプトコンパイルで始まりました。


今回から外部の先生をお呼びしての授業。


なんだか今までとテンポが違います

ここが大事!ってものすごく強調するので聞いてて飽きないです。


public class Main{
 public static void main(String[] args){
System.out.println("hello world");
}
}


おぼえろー!っとめっちゃ強調されたので、

ダイレクトに打ってみましたができました!


ちなみにNetbeansさんのテンプレート機能に頼ると

psmv [tab] sout[tab] で簡単入力できたりします。


覚えたから頼ってもいいかな!


授業がEclipseなので両方でやってみてますが、

今のところNetbenasさんの方に軍配があがってます。


仕事先で好きなツール使えるとは限らないらしいので

結局は両方覚えなきゃいけない雰囲気。


今回は変数とデータ型まで。明日からループです。


PHPjavascriptなんてなかったと言わんばかりの丁寧な説明。


PHPで苦しんだ方たちもなんとかがんばってるみたいです!


課題を終わらせて時間待ってる間に、GUI関係をいじってみてました。


なにこれVBAのフォームじゃないですか!


labelをcaptionじゃなくてtextで読めるのはちょっと気に入りました。


JAVAは予習なしで行ってみる所存です。明日の授業が楽しみ!

PHP版NetbeansからフルバージョンNetbeansに入れ替えてみた~Javaで簡単にhello world~

f:id:nazuna_0124:20170403224602p:plain

もしドラクエの呪文がひとつ覚えられるとしたら、何選びますか?


選んだ呪文でプログラマとしての一つの方向性が垣間見えるとか言い出してみます。



はいはーい! わたしはピオリム一択です


ベホマラーを選んだ子と一緒に組めばそのチームは最強な気もします。


この手の全体を強化するものを選択するのが、性格出ているのではないかと。

呪文唱えたあとは寝てても良さそう


人気があるのは回復系とルーラだそうです。


バグも治せるなら回復系


急な仕様変更も飛ばせるならバシルーラが最強かもしれません。


さて、いつもどおり話を戻しまして。

Netbeansの再インストールです。


あんまり深く考えずに入れたせいで、PHPバージョンなのでした。。


結果としてはフルバージョンを入れただけで、PHPに問題なく

Javaも作成できるようになりました。


手順はこんなかんじ


  • Netbeansをアンインストール。デフォで設定フォルダは消さないようになってます。
  • jdkインストール。古いバージョンはアカウントが必要ぽい?諦めて最新バージョン。
  • NetbeansのFullバージョンをインストール
  • javaのプロジェクト作成
  • おまじないは最初から入っているので、はろーわーるど!


こっそり知らなかったんで紹介していない機能がありました。


テンプレート機能です。日本語の単語登録的なもので、

短くうってtabキーを打つだけで呼び出してくれます。


javaは特にデバッグプリントのコマンドが長いので覚えとくと便利!! f:id:nazuna_0124:20170403230441g:plain


打ち終わったあとの画面したに注目です。

(キー変更済み)F6キーで即実行も大変べんりです!

Softbank光でルーターを変えたら本当にはやくなった

f:id:nazuna_0124:20170312082946p:plain

日曜だというのに姪っ子に叩き起こされてドラゴンボール超に付き合わされました。

どっかで見かけましたが、作中キャラの出産方法に対して批判があがっているそうな。

分娩の苦労なく出産(?)する描写があったことにお怒りのご様子。


ちなみにアニメの話どころか実際の無痛分娩にも批判的な意見は多いようです。


少々デリケートなお話ですので、この話題そのものには突っ込みませんが、

根底にあるものは苦労するものは報われるです。


さらに拗らせると苦労したなら報われても許してやろうもあったり。


この考えは結構不幸。ただでさえ精神的に病みやすいプログラマの皆様は

シフトキー押しながら削除したほうがよさそうです。


苦労は努力よりも裏切ると思いますですよ。


何かを教える時は、わたしと同じ苦労はするな!が口癖。

でもわたしが50時間くらいかかったVBAスクレイピング、教えると

1,2時間で終わるのはちょっとだけもやもやします。


何が言いたいかと言いますと、IDE等の自動補完にはさっさと頼りましょう!


さて話を戻しまして、通信速度のお話です。


表題の通りソフトバンクなのですが、ここのところずっと遅くて困ってました。


はっきりと体感が遅いのですよね。どのページ開くのにも微妙に時間がかかる


ざっくり調べたところ、ついてくるBBユニットというルーターが遅いのだとか。

Amazon.co.jp: BUFFALO 【iPhone6対応】 11ac/n/a/g/b 無線LAN親機(Wi-Fiルーター) エアステーション QRsetup ハイパワー ビームフォーミング対応 866+300Mbps WHR-1166DHP3 (利用推奨環境3人・3LDK・2階建): パソコン・周辺機器


だめもとで購入したところ大当たり! さくさくでよかったよかった。


さらっと注意点です。

  • とうぜん環境によるかと思います。
  • LAN側の転送速度は100Mbpsです。
  • LANケーブルの確認、ルーター、モデムの電源入れ直しはとりあえずやりましょう。
  • 交換だけでは治らなくても設定を見る必要もある。


よーし、ならったことの復習がてら設定するぞー!


意気込んでたら、autoにスイッチ切り替えてつなぐだけでした……。


あらかじめ作ってくれてありがとう!