機能拡張作成サンプル

VBAの勉強をしたので覚書

列の英語名を返す奴のサンプル

Sub Main()  
    Set c = ActiveWorkbook.Sheets("シート名").Cells(2, 60)
    CAd = c.Address  

    Debug.Print (CAd)
    Debug.Print (ERow(CStr(CAd)))
    
  
End Sub

'引数:セルアドレス
'戻り値:列名(英語)
Function ERow(CellAddress As String) As String
    Dim regex
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = "[A-Z]+"
    
    
    Dim result
    Set result = regex.Execute(CellAddress)
    
    'Debug.Print (result.Count)
    'Debug.Print (result(0).Value)
        
    Set regex = Nothing
    
    ERow = result(0).Value
End Function

シートのデータが入ってるであろう範囲を判定して 文字フォントと文字ポイントを読み取る奴のサンプル

Sub Main()

  Dim c As Range
  
  Set sheet0 = Workbooks("ブック名").Sheets("シート名")

  
  Row0 = sheet0.UsedRange.Rows.Count
  Col0 = sheet0.UsedRange.Columns.Count
  
  Debug.Print (Row0)
  Debug.Print (Col0)
  

  Set c = sheet0.Range(Cells(1, 1), Cells(Row0, Col0))
  c.Select
  

  For Each c In Selection
    Debug.Print _
      c.Address(False, False) & vbTab & _
      c.Font.Size & vbTab & c.Font.Name
  Next c

End Sub

本日のリベンジ分

複数ファイルに対して複数単語検索をかけるVBAのサンプルです。

 

 (ソース ここから)

Sub ボタン1_Click()

Dim myFile As Variant
Dim f As Variant

ChDir "C:\Users\Admin\Desktop"
myFile = Application.GetOpenFilename( _
FileFilter:="Excel ファイル (*.xls; *.xlsx),*.xls; *.xlsx", _
MultiSelect:=True)

'【ループ】ファイル選択ループ
If IsArray(myFile) Then
For Each f In myFile
Debug.Print f

Workbooks.Open f

'アクティブワークブックのシート数
Set aSheets = ActiveWorkbook.Worksheets
sCount = aSheets.Count
Debug.Print (sCount)

'検索単語数
Set sSheet = Workbooks("開発.xlsm").Worksheets("用語")


MaxRow = sSheet.UsedRange.Rows.Count
MaxCol = sSheet.UsedRange.Columns.Count

'使用最大行
Debug.Print (MaxRow)


'【ループ】シート
For i = 1 To sCount
Set nowSheet = Worksheets(i)


'【ループ】単語
For j = 1 To MaxRow - 1

keyWord = sSheet.Cells(j + 1, 1).Value
' Debug.Print (j)
Debug.Print (keyWord)

Dim beforelngYLine
Dim beforeintXLine

Dim lngYLine As Long
Dim intXLine As Integer
Dim objFind As Object
Dim strAddress As String

Set objFind = nowSheet.Cells.Find(keyWord)
Debug.Print (nowSheet.Name)
If Not objFind Is Nothing Then
strAddress = objFind.Address
Do While Not objFind Is Nothing
Debug.Print ("Loop")
lngYLine = objFind.Cells.Row
intXLine = objFind.Cells.Column
MsgBox keyWord + "、" + CStr(lngYLine) + "行目の" _
+ CStr(intXLine) + "列目にあります"
Debug.Print (CStr(lngYLine) + "行目 " + CStr(intXLine) + "列目にあります")

Set objFind = nowSheet.Cells.FindNext(objFind)

Debug.Print (strAddress + "---" + CStr(objFind.Address))
If strAddress = CStr(objFind.Address) Then
Exit Do
End If

Loop
Else
' MsgBox "見つかりませんでした"
End If

Next j

Next i

ActiveWorkbook.Close

'ファイル選択ループ(後ろ)
Next
Else
Debug.Print myFile
End If

End Sub

(ソース ここまで)

 

急いで書き残してるのでインデントは修正していない。

ファイルIOの話

おじさんやで(´・ω・`)

 

システムというか個人(自分)で使う機能とかサービスでDB構築をするのって

結構面倒なので出力ファイルとかに擬似DBよく作るんだけど

 

その時とかによく使うファイルIOを書き留めておく。

  

package fileIO;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileIO {


public static void main(String[] args) {

//ファイル取り込み
String inPath = "C:\\test_text\\test.txt";
String data = myFileReader(inPath);

 

//ファイル書き出し
String outPath = "C:\\test_text\\outtest.txt";
myFileAddWriter(data+"\r\n", outPath);
}

public static String myFileReader(String filePath){
StringBuilder retSB = new StringBuilder();
try {
File file = new File(filePath);
FileInputStream input = new FileInputStream(file);
InputStreamReader stream = new InputStreamReader(input,"SJIS");
BufferedReader bR = new BufferedReader(stream);

String hantei = bR.readLine();

while(hantei != null){
retSB.append(hantei + "\r\n");
hantei = bR.readLine();
}

bR.close();
} catch (Exception e) {
e.printStackTrace();
}

return retSB.toString();
}

public static void myFileWriter(String dataString,String outputPAth){
FileWriter fW;
try {
fW = new FileWriter(outputPAth);
fW.write(dataString);
fW.close();
} catch (IOException e) {
e.printStackTrace();
}

}

public static void myFileAddWriter(String dataString,String outputPAth){
FileWriter fW;
try {
fW = new FileWriter(outputPAth,true);
fW.write(dataString);
fW.close();
} catch (IOException e) {
e.printStackTrace();
}

}

}

 

これソースべた張りした時左に寄るのどうにかしたいなぁ…(´ε`;)ウーン…

 

またねノシ

出社・退社スクリプトの話

おじさんです(´・ω・`)

 

新社会人になってツイッターで出社と退社を呟くようになったんだが

 

とうとうめんどくさくなってきたので全自動化してみようと思う。

 

まずはtwitterのアカウントを適当に用意する。

 

次は

apps.twitter.com

ここに作成したアカウントを登録しよう

 

細かく説明しようと思ったが、すまない ここを参考にしてくれ

丁寧・親切・直球に書いてくれててわかりやすいぞ

gomyownway.hatenablog.com

 

後はソースコードをラズパイに持っていって動かそう

 

おじさんはソースを実行する時コマンドライン引数としてツイート内容を与えるように変更しているよ(後、クラス名も変えてるよ)

 

jarと先程のソースを置いたところでコンパイルしよう

 

javac -cp twitter4j-core-4.0.4.jar Tweet.java

 

コンパイルできたら実行するぞ

 

java -cp .:twitter4j-core-4.0.4.jar Tweet test

 

f:id:da-machi:20170724235629j:plain

 

こんな感じでツイートてきた ライブラリって有能

 

次はシェルスクリプト(出社スクリプト)を書くぞ

syussya.sh

 

#!bin/sh

cd /home/pi/~(ソースのあるディレクトリ)

java -cp .:twitter4j-core-4.0.4.jar Tweet 出社

cd

 

完成!!(同じファイルの退社版も作ってます。)

 ※お分かりいただけただろうか、実行ディレクトリのパスを試行錯誤したが

わからずにcdを連打した力技汚スクリプトだ(今後改善します。)

 

後は、定時にスクリプトを実行するようにcrontab設定するぞ

 

crontab -e で設定ファイルが開く(よく忘れる)

 

www.server-memo.net

細かい書式はここに載ってるぞ! よくお世話になるサイトだ(覚書)

 

作りながらブログ書いたから結合動作チェックは 行えてない

 

初めてBotっぽいものを作ったが案外簡単だったんでどんどん機能を載せて行きたいと思う おじさんであった(´・ω・`)

 

 

手遊び

友人と昼飯を食っていると (ワイ)ふざけたものを作った→(友人)解きたい 

の流れから問題を出すことになった。

 

文字数:64文字の文章を何らかの方法で暗号化した。

 

暗号化を行った時刻は以下のとおりである。
java.util.Date toString():Thu Jul 06 21:31:44 JST 2017
java.util.Date getTime():1499344304406

 

-----暗号化後-----
-39119-102-39120-126-39119-101-39120-126-39119-96-39120-127-39119-76-39119-76-39119-95-39118119-36-115-101-39119-123-39120127-39119-115-35-105-91-39119-95-39120118-39119-127-39119-88-39119-100-39118119-37-75121-39119-95-39119124-39119-102-39120-128-39120124-39119-123-39120126-39119-115-39119-96-39119-115-38-80-127-39120-120-39118119-39119-109-39119-119-39119-91-39119-127-39119-98-39119-96-39119-123-36-111-82-39119-125-39119-102-39119-123-39120-126-39119-90-39118119-39119120-39120122-39119-115-39119124-39119-119-39119-109-39120120-39119-92-39119-122-39120-127-39119-79-39119-115-39119-121-39120-126-39118120

補足:復号化すると64文字の意味のある文章になる。

 

 

とりあえずなんか作った。

とりあえずノリと勢いでCSVファイルを取り扱えるライブラリ(jar)を作ってみた。

 

仕様はガバガバだし機能も少ないがシンプルにCSVをオブジェクトとして扱えるようにしてみたものである。

 

CSVmanager.zip 中には CSVmanager.jar とjavadocが入ってます。

今後、気が乗ったら改良していきます。

開発 - Google ドライブ

おじさんはブログをはじめました。

どうも最近SEになったおじさんです。

 

ブログを書いていきます。()

 

備忘録(備忘録)的なブログですのでよしなに

 

突然ですが、「夢を描けば技術は必ず付いてくる」おじさんはこの言葉が大好きです。

人生の心訓ポジに位置する言葉です。

 

まぁ、とりあえず【夢を描きましょう】。

 

今回描く夢は「.exe」ファイルを作成し実行するという夢です。

 

とりあえず必要な材料は

eclipse(pleiades-4.6.3-java-win-64bit-jre_20170422)

・exewrap1.1.6

 

手順はeclipseで適当なプログラムをこしらえる。

eclipseで)プロジェクトを選択してエクスポート

>JARファイル[次へ]>エクスポート先を選択[次へ]

>[次へ]>エントリーポイントクラスの指定[完了]

 

次にexewrapを適当なディレクトリに解凍し同階層にエクスポートした~.jarを持ってきてcmdを開き解凍ディレクトリまで移動し「>exewrap.exe ~.jar」を実行

f:id:da-machi:20170604224348j:plain

 

 こんな感じになるので出力された~.exe(今回はexportTest.exe)を実行。

 

 今回作成したexeの種類はコンソールアプリケーションなので実行するとcmdが開き動作します。

f:id:da-machi:20170604224843j:plain

こんな感じです

 

本日の夢、達成!

  

今回作成したプログラムソースその1(ExportTestクラス)

 public class ExportTest {

 public ExportTest() {

 }

  //出力するだけ
  public void printTest(String str){
  System.out.println("テスト出力:" + str);
 }

}

  

その2(MainTest00クラス)

 public class MainTest00 {

 public static void main(String[] args) {

  ExportTest exTest = new ExportTest();
  String str = "test";

  for (int i = 0; i < 100; i++) {
   //回数+test文字列が表示される。
   exTest.printTest(i + str);
   try {
     //1000ミリ秒(1秒)プログラム停止
    Thread.sleep(1000);
   } catch (Exception e) {
    System.out.println(e);
   }
  }
 }
}

 

 ※今回の失敗点

x86が32bit、x64が64bitなんですねぇ…逆で覚えてて実行ファイル出力がうまく行ってない事に気づいて無くて20分位無駄にしました。(やっかいなことに失敗してても実行ファイルは出力されるみたいです…)

f:id:da-machi:20170604231836j:plain

not foundって書いとるやんけ

 

みんなは出力ステータス、ちゃんと見ような?(すっとぼけ)

 

では、またの( ˙灬˙ ) ノシ