ワークブックにシートが存在するかチェックする関数
パラメータは、ワークブックのオブジェクトとシート名
パラメータで渡したワークブックに、パラメータで渡したシート名が存在する場合にtrueが返却される。存在しない場合は、falseが返却される。
Public Function sheetExist(book As Workbook, name As String)
Dim ws As Worksheet
Dim flag As Boolean
For Each ws In book.Worksheets
If ws.name = name Then
flag = True
Exit For
End If
Next ws
sheetExist = flag
End Function
シートを追加する処理などでチェックをしておくと、エラーを回避できます。
2011年7月2日土曜日
2011年6月28日火曜日
Excel シートの存在チェック
Public Function sheetExist(name As String)
Dim ws As Worksheet
Dim flag As Boolean
For Each ws In Worksheets
If ws.name = name Then
flag = True
Exit For
End If
Next ws
sheetExist = flag
End Function
Dim ws As Worksheet
Dim flag As Boolean
For Each ws In Worksheets
If ws.name = name Then
flag = True
Exit For
End If
Next ws
sheetExist = flag
End Function
2011年6月21日火曜日
Excel オートシェイプ メモ用
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 54#, 13.5, 54#, 13.5). _
Select
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 43
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
ExecuteExcel4Macro "FORMULA(""=R[1]C"")"
Range("A1").Select
ActiveCell.FormulaR1C1 = "6/21/2011"
Range("A2").Select
ActiveSheet.Shapes("Rectangle 1").Select
Range("C4").Select
ActiveSheet.Shapes("Rectangle 1").Select
ExecuteExcel4Macro "FORMULA(""=RC"")"
Range("C6:C7").Select
Range("C7").Activate
ActiveSheet.Shapes("Rectangle 1").Select
Selection.ShapeRange.Line.Weight = 1.25
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 43
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Fill.OneColorGradient msoGradientVertical, 1, 0.23
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 63#, 54#, 54#, 13.5). _
Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 33
Selection.ShapeRange.Fill.BackColor.RGB = RGB(255, 255, 255)
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Fill.Patterned msoPattern5Percent
ActiveSheet.Shapes.Range(Array("Rectangle 2", "Rectangle 1")).Select
Selection.ShapeRange.Group.Select
Select
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 43
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
ExecuteExcel4Macro "FORMULA(""=R[1]C"")"
Range("A1").Select
ActiveCell.FormulaR1C1 = "6/21/2011"
Range("A2").Select
ActiveSheet.Shapes("Rectangle 1").Select
Range("C4").Select
ActiveSheet.Shapes("Rectangle 1").Select
ExecuteExcel4Macro "FORMULA(""=RC"")"
Range("C6:C7").Select
Range("C7").Activate
ActiveSheet.Shapes("Rectangle 1").Select
Selection.ShapeRange.Line.Weight = 1.25
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 43
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Fill.OneColorGradient msoGradientVertical, 1, 0.23
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 63#, 54#, 54#, 13.5). _
Select
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 33
Selection.ShapeRange.Fill.BackColor.RGB = RGB(255, 255, 255)
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Fill.Patterned msoPattern5Percent
ActiveSheet.Shapes.Range(Array("Rectangle 2", "Rectangle 1")).Select
Selection.ShapeRange.Group.Select
2011年6月19日日曜日
JAVA Log4J 1.2.17 を使ってみた!5
今日は、ログファイルのローテーションの方法を書きます。
環境周りは、省略します。
環境を確認したい方は、
こちらかこちらへ
注目するのは、4行目から10行目の内容
<appender ~>~</appender>
この内容がログファイルのローテーションの方法を設定している。
<appender name="File" class="org.apache.log4j.DailyRollingFileAppender">
nameには、appenderの名前を指定する。
(ファイルとコンソール出力の時と同じ)
classには、org.apache.log4j.DailyRollingFileAppenderを指定する。
このクラスがファイルに出力し、ローテーションするためのクラスとなる。
<param ~ />に設定可能な項目は、
DatePattern、File、Append、BufferedIO、BufferSize、Threshold、ImmediateFlush、Encoding
DatePattern以外は、FileAppenderで説明したので省略します。
DatePatternのvalueに設定する内容によって、ローテーションするタイミングが変わります。
ローテーションのタイミングについては、
'.'yyyy-MM 月が変わるごと
'.'yyyy-ww 週が変わるごと
'.'yyyy-MM-dd 日が変わるごと
'.'yyyy-MM-dd-a 午前と午後が変わるごと
'.'yyyy-MM-dd-HH 1時間ごと
他のparamについて詳しく知りたい方は、こちら
<layout ~></layout>
レイアウトについても、前回までに説明したので省略します。
環境周りは、省略します。
環境を確認したい方は、
こちらかこちらへ
注目するのは、4行目から10行目の内容
<appender ~>~</appender>
この内容がログファイルのローテーションの方法を設定している。
<appender name="File" class="org.apache.log4j.DailyRollingFileAppender">
nameには、appenderの名前を指定する。
(ファイルとコンソール出力の時と同じ)
classには、org.apache.log4j.DailyRollingFileAppenderを指定する。
このクラスがファイルに出力し、ローテーションするためのクラスとなる。
<param ~ />に設定可能な項目は、
DatePattern、File、Append、BufferedIO、BufferSize、Threshold、ImmediateFlush、Encoding
DatePattern以外は、FileAppenderで説明したので省略します。
DatePatternのvalueに設定する内容によって、ローテーションするタイミングが変わります。
ローテーションのタイミングについては、
'.'yyyy-MM 月が変わるごと
'.'yyyy-ww 週が変わるごと
'.'yyyy-MM-dd 日が変わるごと
'.'yyyy-MM-dd-a 午前と午後が変わるごと
'.'yyyy-MM-dd-HH 1時間ごと
他のparamについて詳しく知りたい方は、こちら
<layout ~></layout>
レイアウトについても、前回までに説明したので省略します。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="File" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="C:/log4j.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/> </layout> </appender> <appender name="Console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="Console" /> <appender-ref ref="File" /> </root> </log4j:configuration>
2011年6月18日土曜日
JAVA Log4J 1.2.17 を使ってみた!4
今日は、コンソールの出力方法を書きます。
環境周りは、省略します。
環境を確認したい方は、
こちらかこちらへ
注目するのは、10行目から14行目の内容
<appender ~>~</appender>
この内容がコンソールに出力する内容を設定している。
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
nameには、appenderの名前を指定する。(ファイル出力の時と同じ)
classには、org.apache.log4j.ConsoleAppenderを指定する。
このクラスがコンソールに出力するためのクラスとなる。
<layout ~></layout>
レイアウトについては、前回説明したので省略します。
明日以降に、ログファイルのローテーションについて書きます。
環境周りは、省略します。
環境を確認したい方は、
こちらかこちらへ
注目するのは、10行目から14行目の内容
<appender ~>~</appender>
この内容がコンソールに出力する内容を設定している。
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
nameには、appenderの名前を指定する。(ファイル出力の時と同じ)
classには、org.apache.log4j.ConsoleAppenderを指定する。
このクラスがコンソールに出力するためのクラスとなる。
<layout ~></layout>
レイアウトについては、前回説明したので省略します。
明日以降に、ログファイルのローテーションについて書きます。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="File" class="org.apache.log4j.FileAppender"> <param name="File" value="C:/log4j.log" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/> </layout> </appender> <appender name="Console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="Console" /> <appender-ref ref="File" /> </root> </log4j:configuration>
2011年6月17日金曜日
JAVA Log4J 1.2.17 を使ってみた!3
昨日かけなかったLog4jについて、今日も続きの内容を書こう。
環境周りは、昨日までに2回書いてるのでパスします。確認したい方は、
昨日分はこちら
一昨日分はこちら
昨日書けなかった、<layout ~>~</layout>について、
今回使ったLayoutクラスは、org.apache.log4j.PatternLayoutを使用した。
自分でログの出力フォーマットを決めることができるクラスで、
フォーマットについては、<param ~/>で設定する。
nameには、ConversionPatternを設定し、valueにフォーマットを指定する。
今回は、"%d %-5p %c - %-5m [%t] (%F:%L)%n"を設定
%dは、日付を出力
%pは、ログのレベルを出力
%cは、ログを出力したクラスを出力
%mは、メッセージの内容を出力k
%tは、スレッドを出力
&Fは、ログを出力したファイル名を出力
%Lは、ログを出力したファイルの行番号を出力
%nは、改行コードを出力
一昨日のクラスを実行して出力されるログは、下記のようになる。
環境周りは、昨日までに2回書いてるのでパスします。確認したい方は、
昨日分はこちら
一昨日分はこちら
昨日書けなかった、<layout ~>~</layout>について、
今回使ったLayoutクラスは、org.apache.log4j.PatternLayoutを使用した。
自分でログの出力フォーマットを決めることができるクラスで、
フォーマットについては、<param ~/>で設定する。
nameには、ConversionPatternを設定し、valueにフォーマットを指定する。
今回は、"%d %-5p %c - %-5m [%t] (%F:%L)%n"を設定
%dは、日付を出力
%pは、ログのレベルを出力
%cは、ログを出力したクラスを出力
%mは、メッセージの内容を出力k
%tは、スレッドを出力
&Fは、ログを出力したファイル名を出力
%Lは、ログを出力したファイルの行番号を出力
%nは、改行コードを出力
一昨日のクラスを実行して出力されるログは、下記のようになる。
2011-06-17 21:34:48,436 DEBUG sample.Test - デバッグだよ~ [main] (Test.java:11) 2011-06-17 21:34:48,436 INFO sample.Test - インフォだよ。 [main] (Test.java:12) 2011-06-17 21:34:48,436 WARN sample.Test - ワーニング! [main] (Test.java:13) 2011-06-17 21:34:48,436 ERROR sample.Test - エラーッ!! [main] (Test.java:14) 2011-06-17 21:34:48,436 FATAL sample.Test - フェイタルッ!!! [main] (Test.java:15)
2011年6月16日木曜日
JAVA Log4J 1.2.17 を使ってみた!2
昨日の続きで、今日もLog4jについて調べてみた。
今日も昨日と同様の環境だが、念のためのせておこう。
Java 1.6系
log4j log4j-1.2.17.jar
クラスパスにlog4j-1.2.17.jarを指定する。
ダウンロードは、こちら
昨日は、コンソールとファイルに出力されるように設定ファイルを
作成していた。
まずは、何をどうすれば、ファイルに出力されるのか書くことにする。
注目するのは、4行目から9行目の内容
<appender ~>~</appender>
この内容がファイルに出力する内容を設定している。
<appender name="File" class="org.apache.log4j.FileAppender">
nameには、appenderの名前を指定する。
classには、org.apache.log4j.FileAppenderを指定する。
このクラスがファイルに出力するためのクラスとなる。
<param name="File" value="C:/log4j.log" />
paramタグは、appenderに渡すパラメータを指定する。
nameにFileを指定し、vlaueに出力するファイルのパスを指定する。
この内容が出力先のファイル名になる。
ファイルが存在していない場合は、自動で作成する。
それ以外のパラメータは、Append、BufferedIO、BufferSize、
Threshold、ImmediateFlush、Encoding
Appendについては、追記モードを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、falseになっていて追記されない。
毎回ファイルを上書きするので注意が必要。
例
<param name="Append" value="true" />
BufferedIOについては、バッファリングを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、falseになっていてバッファリングされない。
BufferSizeについては、バッファサイズを指定する。
バッファリングをする場合のバッファサイズになる。
Thresholdについては、appenderごとに出力するログのレベルを指定する。
指定する値は、DEBUG/INFO/WARN/ERROR/FATALを指定できる。
ImmediateFlushについては、バッファの内容を即時出力するかを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、trueになっていてバ即時に出力する。
Encodingについては、出力するファイルの文字コードを指定する。
初期値(指定しない場合)は、OSの文字コードで出力される。
これで、appendarの設定は、完了。
このappendarを使用するかを指定するのが、
<root>~</root>
になる。
appender-refタグで、上記で設定したappendarのnameを指定する。
<appender-ref ref="File" />
ちなみに、<level value="debug" />で、ログの出力レベルを設定できる。
以上で、ファイルに出力する設定が完了。
結構長くなってしまったので、
<layout ~>~</layout>
については、また明日にでも書きます。
今日も昨日と同様の環境だが、念のためのせておこう。
Java 1.6系
log4j log4j-1.2.17.jar
クラスパスにlog4j-1.2.17.jarを指定する。
ダウンロードは、こちら
昨日は、コンソールとファイルに出力されるように設定ファイルを
作成していた。
まずは、何をどうすれば、ファイルに出力されるのか書くことにする。
注目するのは、4行目から9行目の内容
<appender ~>~</appender>
この内容がファイルに出力する内容を設定している。
<appender name="File" class="org.apache.log4j.FileAppender">
nameには、appenderの名前を指定する。
classには、org.apache.log4j.FileAppenderを指定する。
このクラスがファイルに出力するためのクラスとなる。
<param name="File" value="C:/log4j.log" />
paramタグは、appenderに渡すパラメータを指定する。
nameにFileを指定し、vlaueに出力するファイルのパスを指定する。
この内容が出力先のファイル名になる。
ファイルが存在していない場合は、自動で作成する。
それ以外のパラメータは、Append、BufferedIO、BufferSize、
Threshold、ImmediateFlush、Encoding
Appendについては、追記モードを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、falseになっていて追記されない。
毎回ファイルを上書きするので注意が必要。
例
<param name="Append" value="true" />
BufferedIOについては、バッファリングを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、falseになっていてバッファリングされない。
BufferSizeについては、バッファサイズを指定する。
バッファリングをする場合のバッファサイズになる。
Thresholdについては、appenderごとに出力するログのレベルを指定する。
指定する値は、DEBUG/INFO/WARN/ERROR/FATALを指定できる。
ImmediateFlushについては、バッファの内容を即時出力するかを指定する。
指定する値は、boolean(true/false)を設定する。
初期値(指定しない場合)は、trueになっていてバ即時に出力する。
Encodingについては、出力するファイルの文字コードを指定する。
初期値(指定しない場合)は、OSの文字コードで出力される。
これで、appendarの設定は、完了。
このappendarを使用するかを指定するのが、
<root>~</root>
になる。
appender-refタグで、上記で設定したappendarのnameを指定する。
<appender-ref ref="File" />
ちなみに、<level value="debug" />で、ログの出力レベルを設定できる。
以上で、ファイルに出力する設定が完了。
結構長くなってしまったので、
<layout ~>~</layout>
については、また明日にでも書きます。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="File" class="org.apache.log4j.FileAppender"> <param name="File" value="C:/log4j.log" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/> </layout> </appender> <appender name="Console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="Console" /> <appender-ref ref="File" /> </root> </log4j:configuration>
2011年6月15日水曜日
JAVA Log4J 1.2.17 を使ってみた!
Javaでプログラムを作ってると、System.out.println()とか
System.out.print()を使って、ログのような出力をすることが
結構あると思う。
ちょっとしたツールならいいと思うが、
システムとして作成しているときは、
ちょっとよくないとおもったので、
Log4jを使ってみようと思い、調べてみた。
今回の環境は、
Java 1.6系
log4j log4j-1.2.17.jar
クラスパスにlog4j-1.2.17.jarを指定する。
ダウンロードは、こちら
設定ファイルは、クラスパスの通ったフォルダにlog4j.xmlで作成すると、
指定することなく自動的に読み込んでくれます。
まずは、設定ファイルを作成します。
ファイル名は、log4j.xml
.propertiesで作成することもできるようなので、それはまた後日
xmlの中身の解説も今回は省略します。
次に、Javaのクラスを作成します。
クラス名は、Test
試してみてください。
System.out.print()を使って、ログのような出力をすることが
結構あると思う。
ちょっとしたツールならいいと思うが、
システムとして作成しているときは、
ちょっとよくないとおもったので、
Log4jを使ってみようと思い、調べてみた。
今回の環境は、
Java 1.6系
log4j log4j-1.2.17.jar
クラスパスにlog4j-1.2.17.jarを指定する。
ダウンロードは、こちら
設定ファイルは、クラスパスの通ったフォルダにlog4j.xmlで作成すると、
指定することなく自動的に読み込んでくれます。
まずは、設定ファイルを作成します。
ファイル名は、log4j.xml
.propertiesで作成することもできるようなので、それはまた後日
xmlの中身の解説も今回は省略します。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="File" class="org.apache.log4j.FileAppender"> <param name="File" value="C:/log4j.log" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/> </layout> </appender> <appender name="Console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d %-5p %c - %-5m [%t] (%F:%L)%n"/> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="Console" /> <appender-ref ref="File" /> </root> </log4j:configuration>
次に、Javaのクラスを作成します。
クラス名は、Test
package sample; import org.apache.log4j.Logger; public class Test { public static void main(String[] args) { Logger logger = Logger.getLogger(Test.class); logger.debug("デバッグだよ~"); logger.info("インフォだよ。"); logger.warn("ワーニング!"); logger.error("エラーッ!!"); logger.fatal("フェイタルッ!!!"); } }
試してみてください。
2011年6月14日火曜日
JAVA Stringをチェックするクラス2
先日の文字列をチェックするクラスの第2弾サンプルです。
正規表現の書き方を変更しました。
何が違うか、確認してみてください。
正規表現の書き方を変更しました。
何が違うか、確認してみてください。
import java.util.regex.Pattern; public class StringUtil2 { /** * alphabetがアルファベットの場合に、trueを返す。 * * @param alphabet 文字列 * @return boolean true : アルファベット / false : アルファベット以外 */ public static boolean isAlphabet(String alphabet) { try { return (Pattern.compile("^[a-zA-Z]*$")).matcher(alphabet).matches(); } catch (Exception e) { return false; } } /** * characterが英数字の場合に、trueを返す。 * * @param character 文字列 * @return boolean true : 英数字 / false : 英数字以外 */ public static boolean isNumAlphabet(String character) { try { return (Pattern.compile("^[a-zA-Z0-9]*$")).matcher(character).matches(); } catch (Exception e) { return false; } } /** * numが数字の場合に、trueを返す。 * * @param num 文字列 * @return boolean true : 数字 / false : 数字以外 */ public static boolean isNum(String num) { try { return (Pattern.compile("^[0-9]*$")).matcher(num).matches(); } catch (Exception e) { return false; } } /** * markが半角記号の場合に、trueを返す。 * * @param mark 文字列 * @return boolean true : 半角記号 / false : 半角記号以外 */ public static boolean isMark(String mark) { try { return (Pattern.compile("^[ -/:-@\\[-\\`\\{-\\~]*$")).matcher(mark).matches(); } catch (Exception e) { return false; } } /** * characterが半角の場合に、trueを返す。 * * @param character 文字列 * @return boolean true : 半角 / false : 半角以外 */ public static boolean isOneByteChar(String character) { try { return (Pattern.compile("^[a-zA-Z0-9 -/:-@\\[-\\`\\{-\\~]*$")).matcher(character).matches(); } catch (Exception e) { return false; } } /** * kanaが半角カナの場合に、trueを返す。 * * @param kana 文字列 * @return boolean true : 半角カナ / false : 半角カナ以外 */ public static boolean isOneByteKana(String kana) { try { return (Pattern.compile("^[。-゚+]*$")).matcher(kana).matches(); } catch (Exception e) { return false; } } /** * hiraganaがひらがなの場合に、trueを返す。 * * @param hiragana 文字列 * @return boolean true : ひらがな / false : ひらがな以外 */ public static boolean isHiragana(String hiragana) { try { return (Pattern.compile("^[ぁ-ゞ]*$")).matcher(hiragana).matches(); } catch (Exception e) { return false; } } /** * katakanaがカタカナの場合に、trueを返す。 * * @param katakana 文字列 * @return boolean true : カタカナ文字 / false : カタカナ以外 */ public static boolean isKatakana(String katakana) { try { return (Pattern.compile("^[ァ-ヶ]*$")).matcher(katakana).matches(); } catch (Exception e) { return false; } } /** * kanjiが漢字の場合に、trueを返す。 * * @param kanji 文字列 * @return boolean true : 漢字 / false : 漢字以外 */ public static boolean isKanji(String kanji) { try { return (Pattern.compile("^[一-龠]*$")).matcher(kanji).matches(); } catch (Exception e) { return false; } } /** * zenkakuが全角の場合に、trueを返す。 * * @param kanji 文字列 * @return boolean true : 全角 / false : 全角以外 */ public static boolean isTwoByteChar(String zenkaku) { try { return (Pattern.compile("^[^ -~。-゚]*$")).matcher(zenkaku).matches(); } catch (Exception e) { return false; } } }
2011年6月13日月曜日
JAVA ListやMapや配列をStringへ変換(ログ表示用)
システム作っていると、Debug用のLogにListの内容や、Mapの内容を整形して出力したいときがでてくるんだよね。
そんなときに使えるよ。
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class StringUtils { @SuppressWarnings("unchecked") public static void main(String[] args) { List l = new ArrayList(); for (int i = 0; i < 100; i++) { l.add(Integer.toString(i)); } System.out.println(StringUtils.object2String(l, "")); System.out.println("----------"); Map m = new HashMap(); for (int i = 0; i < 10; i++) { Map map = new HashMap(); for (int j = 0; j < 10; j++) { map.put("key" + j, "val" + j); } l.add(map); m.put(i, map); } System.out.println(StringUtils.object2String(m, "")); System.out.println("----------"); System.out.println(StringUtils.object2String(l, "")); System.out.println("----------"); for (int i = 0; i < 2; i++) { List l2 = new ArrayList(l); l.add(l2); } Map map = new HashMap(); for (int i = 0; i < 10; i++) { List l3 = new ArrayList(); for (int j = 0; j < 10; j++) { l3.add(""+ i + "" + j); } map.put("key" + i, l3); } l.add(map); System.out.println(StringUtils.object2String(l, "")); System.out.println("----------"); l.add(new String[]{"arr1", "arr2", "arr3", "arr4", "arr5", "arr6", "arr7", "arr8", "arr9", "arr0"}); System.out.println(StringUtils.object2String(l, "")); } public static final String LINE_SEPARATOR = System.getProperty("line.separator"); public static final String INDENT = " "; public static final String BLANK = " "; public static final String COLON = ":"; public static final String LEFT_CURLY_BRACKET = "{"; public static final String RIGHT_CURLY_BRACKET = "}"; public static final String LEFT_SQUARE_BRACKET = "{"; public static final String RIGHT_SQUARE_BRACKET = "}"; @SuppressWarnings("unchecked") public static String object2String(Object obj, String indent) { StringBuilder sb = new StringBuilder(); sb.append(obj.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); if (Iterable.class.isAssignableFrom(obj.getClass())) { sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT)); } else if (Map.class.isAssignableFrom(obj.getClass())) { sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT)); } else if (obj instanceof Object[]) { sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT)); } else { sb.append(obj); } sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); return sb.toString(); } @SuppressWarnings("unchecked") public static String iterator2String(Iterable it, String indent) { StringBuilder sb = new StringBuilder(); int index = 0; for (Object obj : it) { sb.append(indent); sb.append(StringUtils.LEFT_SQUARE_BRACKET); sb.append(StringUtils.BLANK); sb.append(index); sb.append(StringUtils.BLANK); sb.append(StringUtils.RIGHT_SQUARE_BRACKET); sb.append(StringUtils.BLANK); sb.append(StringUtils.COLON); sb.append(StringUtils.BLANK); if (Iterable.class.isAssignableFrom(obj.getClass())) { sb.append(obj.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else if (Map.class.isAssignableFrom(obj.getClass())) { sb.append(obj.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else if (obj instanceof Object[]) { sb.append(obj.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else { sb.append(obj); } index++; sb.append(StringUtils.LINE_SEPARATOR); } return sb.toString(); } @SuppressWarnings("unchecked") public static String map2String(Map map, String indent) { StringBuilder sb = new StringBuilder(); for (Object obj : map.entrySet()) { Entry e = (Entry) obj; Object val = e.getValue(); sb.append(indent); sb.append(e.getKey()); sb.append(StringUtils.BLANK); sb.append(StringUtils.COLON); sb.append(StringUtils.BLANK); if (Iterable.class.isAssignableFrom(val.getClass())) { sb.append(val.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(StringUtils.iterator2String((Iterable) val, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else if (Map.class.isAssignableFrom(val.getClass())) { sb.append(val.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(map2String((Map) val, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else if (obj instanceof Object[]) { sb.append(obj.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else { sb.append(val); } sb.append(StringUtils.LINE_SEPARATOR); } return sb.toString(); } @SuppressWarnings("unchecked") public static String array2String(Object[] arr, String indent) { StringBuilder sb = new StringBuilder(); int index = 0; for (Object obj : arr) { sb.append(indent); sb.append(StringUtils.LEFT_SQUARE_BRACKET); sb.append(StringUtils.BLANK); sb.append(index); sb.append(StringUtils.BLANK); sb.append(StringUtils.RIGHT_SQUARE_BRACKET); sb.append(StringUtils.BLANK); sb.append(StringUtils.COLON); sb.append(StringUtils.BLANK); if (Iterable.class.isAssignableFrom(obj.getClass())) { sb.append(obj.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(StringUtils.iterator2String((Iterable) obj, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else if (Map.class.isAssignableFrom(obj.getClass())) { sb.append(obj.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(StringUtils.map2String((Map) obj, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else if (obj instanceof Object[]) { sb.append(obj.getClass().getCanonicalName()); sb.append(StringUtils.BLANK); sb.append(StringUtils.LEFT_CURLY_BRACKET); sb.append(StringUtils.LINE_SEPARATOR); sb.append(StringUtils.array2String((Object[]) obj, indent + StringUtils.INDENT)); sb.append(indent); sb.append(StringUtils.RIGHT_CURLY_BRACKET); } else { sb.append(obj); } index++; sb.append(StringUtils.LINE_SEPARATOR); } return sb.toString(); } }
2011年6月12日日曜日
Excel 指定したシートの指定行から最終入力行までクリア
Public Sub clear(sheetName As String, rowNum As Integer)
Application.ScreenUpdating = False
ThisWorkbook.Sheets(sheetName).Activate
With ActiveSheet
If .AutoFilterMode Then
Selection.End(xlToRight).Select
HeaderLastCol = Selection.Column
.Range(.Cells(rowNum, 1), .Cells(rowNum, HeaderLastCol)).Select
Selection.AutoFilter
End If
End With
If ActiveCell.SpecialCells(xlLastCell).Row < rowNum Then
Exit Sub
End If
ActiveSheet.Rows("1:" & ActiveCell.SpecialCells(xlLastCell).Row).Delete Shift:=xlUp
Application.ScreenUpdating = True
End Sub
Application.ScreenUpdating = False
ThisWorkbook.Sheets(sheetName).Activate
With ActiveSheet
If .AutoFilterMode Then
Selection.End(xlToRight).Select
HeaderLastCol = Selection.Column
.Range(.Cells(rowNum, 1), .Cells(rowNum, HeaderLastCol)).Select
Selection.AutoFilter
End If
End With
If ActiveCell.SpecialCells(xlLastCell).Row < rowNum Then
Exit Sub
End If
ActiveSheet.Rows("1:" & ActiveCell.SpecialCells(xlLastCell).Row).Delete Shift:=xlUp
Application.ScreenUpdating = True
End Sub
2011年6月11日土曜日
JAVA Stringをチェックするクラス
文字列をチェックするクラスのサンプルです。
これ以外にも必要なメソッドはたくさんあるけど、まずはこれくらい。
また、これと同じ処理を別の書き方もできるよ。
次回は、別の書き方で作成します。
これ以外にも必要なメソッドはたくさんあるけど、まずはこれくらい。
また、これと同じ処理を別の書き方もできるよ。
次回は、別の書き方で作成します。
import java.util.regex.Pattern; public class StringUtil { /** * strがnullか""(空文字)の場合に、trueを返す。 * * @param str 入力値 * @return boolean true : 入力無し / false : 入力有り */ public static boolean isEmpty(String str) { if (str == null || "".equals(str)) { return true; } return false; } /** * alphabetがアルファベットの場合に、trueを返す。 * * @param alphabet アルファベットの文字列 * @return boolean true : アルファベット / false : アルファベット以外 */ public static boolean isAlphabet(String alphabet) { try { return !(Pattern.compile("[^a-zA-Z]")).matcher(alphabet).matches(); } catch (Exception e) { return false; } } /** * characterが英数字の場合に、trueを返す。 * * @param character 英数字の文字列 * @return boolean true : 英数字 / false : 英数字以外 */ public static boolean isNumAlphabet(String character) { try { return !(Pattern.compile("[^a-zA-Z0-9]")).matcher(character).matches(); } catch (Exception e) { return false; } } /** * str1がstr2より大きい場合に、trueを返す。 * * @param str1 英数字の文字列1 * @param str2 英数字の文字列2 * @return boolean true : 文字列1が大きい / false : 文字列1が大きくない */ public static boolean charGreaterThan(String str1, String str2) { try { return str1.compareTo(str2) > 0; } catch (Exception e) { return false; } } /** * str1がstr2より小さい場合に、trueを返す。 * * @param str1 英数字の文字列1 * @param str2 英数字の文字列2 * @return boolean true : 文字列1が小さい / false : 文字列1が小さくない */ public static boolean charSmallerThan(String str1, String str2) { try { return str1.compareTo(str2) < 0; } catch (Exception e) { return false; } } /** * str1がstr2以上の場合に、trueを返す。 * * @param str1 英数字の文字列1 * @param str2 英数字の文字列2 * @return boolean true : 文字列1が以上 / false : 文字列1が以上ではない */ public static boolean charGreaterThanEqual(String str1, String str2) { try { return !StringUtil.charSmallerThan(str1, str2); } catch (Exception e) { return false; } } /** * str1がstr2以下の場合に、trueを返す。 * * @param str1 英数字の文字列1 * @param str2 英数字の文字列2 * @return boolean true : 文字列1が以下 / false : 文字列1が以下ではない */ public static boolean charSmallerThanEqual(String str1, String str2) { try { return !StringUtil.charGreaterThan(str1, str2); } catch (Exception e) { return false; } } /** * zenkakuが全角文字の場合に、trueを返す。 * * @param zenkaku 全角の文字列 * @return boolean true : 全角 / false : 全角以外 */ public static boolean isZenkaku(String zenkaku) { try { return !(Pattern.compile("[ -~]")).matcher(zenkaku).matches(); } catch (Exception e) { return false; } } /** * strがstrArrayに存在している場合に、indexを返す。 * * @param str 文字列 * @return int 0,1,2...n : strArrayに存在する / -1 : strArrayに存在しない */ public static int exist(String str, String[] strArray) { int count = 0; if (strArray == null) { return -1; } count = strArray.length; for (int i = 0; i < count; i++) { if (str.startsWith(strArray[i])) { return i; } } return -1; } }
2011年6月10日金曜日
Excel VBA ブックを開く際のエラー2
昨日は、存在しないファイルを指定した際のエラーを回避する方法について
書きましたが、今日は同一のファイル名を開く際のエラーを回避する方法について
調べました。
機能と同じように、FileSystemObjectを使って、ファイルパスからファイル名を
取得します。
取得したファイル名と同じファイルがWorkbooksに存在していないか確認する。
存在している場合は、終了する。
存在していない場合は、指定したファイルを開く。
試してみてください。
Dim fso As Object
Dim path As String
Dim filename As String
Set fso = CreateObject("Scripting.FileSystemObject")
path = "C:\参考資料.xls"
filename = fso.GetFileName(path)
For Each wb In Workbooks
If wb.Name = filename Then
MsgBox filename & "と同じファイル名のブックが開いています。"
Exit Sub
End If
Next wb
書きましたが、今日は同一のファイル名を開く際のエラーを回避する方法について
調べました。
機能と同じように、FileSystemObjectを使って、ファイルパスからファイル名を
取得します。
取得したファイル名と同じファイルがWorkbooksに存在していないか確認する。
存在している場合は、終了する。
存在していない場合は、指定したファイルを開く。
試してみてください。
Dim fso As Object
Dim path As String
Dim filename As String
path = "C:\参考資料.xls"
filename = fso.GetFileName(path)
If wb.Name = filename Then
MsgBox filename & "と同じファイル名のブックが開いています。"
Exit Sub
End If
Next wb
Set wb = Workbooks.Open(filename:=path, ReadOnly:=True)
2011年6月9日木曜日
Excel VBA ブックを開く際のエラー
ブックを開く、閉じるを知ったので色々使っていると、
エラーが発生することがあった。
理由を調べてみると、そもそも開こうとしているブックが
指定したパスに存在していなかったからだ。
存在チェックをしてから開いたほうがいいと思い、
チェックの方法について調べてみた。
チェックする方法は、いくつかあるみたいだけど、
今回は、FileSystemObjectで存在チェックをする。
Dim wb As Workbook
Dim fso As Object
Dim path As String
Set fso = CreateObject("Scripting.FileSystemObject")
path = "C:\参考資料.xls"
If fso.FileExists(path) Then
Set wb = Workbooks.Open(Filename:=path, ReadOnly:=True)
MsgBox "開いた"
wb.Close
Else
MsgBox path & "が存在しませんでした。"
End If
fso.FileExists(path) の部分がファイルの存在チェックをしている処理です。
簡単でした。
エラーが発生することがあった。
理由を調べてみると、そもそも開こうとしているブックが
指定したパスに存在していなかったからだ。
存在チェックをしてから開いたほうがいいと思い、
チェックの方法について調べてみた。
チェックする方法は、いくつかあるみたいだけど、
今回は、FileSystemObjectで存在チェックをする。
Dim wb As Workbook
Dim fso As Object
Dim path As String
Set fso = CreateObject("Scripting.FileSystemObject")
path = "C:\参考資料.xls"
If fso.FileExists(path) Then
Set wb = Workbooks.Open(Filename:=path, ReadOnly:=True)
MsgBox "開いた"
wb.Close
Else
MsgBox path & "が存在しませんでした。"
End If
fso.FileExists(path) の部分がファイルの存在チェックをしている処理です。
簡単でした。
2011年6月8日水曜日
JAVA 固定長ファイル改行コード挿入処理
固定長のファイルに改行コードを挿入するクラスです。
使用方法
第一引数fiは、入力ファイル
第二引数foは、出力ファイル
第三引数bCntは、改行を挿入する位置
public static void main(String[] args) {
}
を実装して使ってみてください。
使用方法
第一引数fiは、入力ファイル
第二引数foは、出力ファイル
第三引数bCntは、改行を挿入する位置
public static void main(String[] args) {
}
を実装して使ってみてください。
import java.util.regex.Pattern; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; public class InsertReturnCode { public boolean insertReturnCode(File fi, File fo, int bCnt){ BufferedInputStream bi = null; BufferedOutputStream bo = null; String line = null; if (fi == null || fo == null ) { System.out.println("パラメータに誤りがあります。"); return false; } else if (fi.isDirectory() || fo.isDirectory()) { System.out.println("ファイルではありません。"); return false; // } else if (!fi.canRead() || !fo.canWrite()) { // System.out.println("読み込みまたは、書き込みが出来ません。"); // return false; } else if (!fi.exists()) { System.out.println("入力ファイルが存在しません。"); return false; // } else if (fo.exists()) { // System.out.println("出力ファイルと同名のファイルが存在します。"); // return false; } else if (fi.getPath().equals(fo.getPath())) { System.out.println("入力ファイルと出力ファイルが同一のパスです。"); return false; } try { byte[] b = new byte[bCnt]; int i = 0; bi = new BufferedInputStream(new FileInputStream(fi)); bo = new BufferedOutputStream(new FileOutputStream(fo)); while (bi.read(b, 0, bCnt) > -1) { bo.write(b, 0 ,bCnt); bo.write(new byte[]{0,10}); i++; } bi.close(); bo.close(); } catch (FileNotFoundException e) { System.out.println("ファイルが見つかりません。"); return false; } catch (UnsupportedEncodingException e) { System.out.println("文字コードがサポートされていません。"); return false; } catch (IOException e) { System.out.println("入出力でエラーが発生しました。"); return false; } return true; } }
2011年6月7日火曜日
Excel VBA ブックを閉じる方法3
昨日の続きで、ブックの閉じる方法についてです。
引数がいくつかあるようなので、調べてみました。
SaveChanges
閉じるブックに変更がなければ、この引数は無視されます。
ブックに変更があり、開いている他のウィンドウ(別アプリケーション)
にブックが表示されている場合、この引数は無視されます。
ブックに変更があり、マクロを実行しているウィンドウにブックが表示されている場合、
この引数は、次のとおり、保存するかどうかを指定します。
Trueの場合、ブックの変更が保存されます。
ブックに関連付けられたファイル名がない場合、FileName が使用されます。
FileName を省略すると、ファイル名を入力するよう求められます。
False の場合、ブックの変更は保存されません。
省略した場合、変更を保存するかどうかを確認するダイアログ ボックスが表示されます。
Filename
このファイル名で変更を保存します。
RouteWorkbook
ブックを次の受信者にルーティングする必要がない場合 (回覧先がない場合、
または既にルーティングされている場合)、この引数は無視されます。
それ以外の場合は、次のリストのとおり、Microsoft Office Excel がブックをルーティングします。
True の場合、ブックを次のブックに移動(アクティブ化)します。
False の場合、ブックを移動しません(アクティブ化されているブックのままにします)。
省略した場合、ブックを送信するかどうかを確認するダイアログ ボックスが表示されます。
引数がいくつかあるようなので、調べてみました。
SaveChanges
閉じるブックに変更がなければ、この引数は無視されます。
ブックに変更があり、開いている他のウィンドウ(別アプリケーション)
にブックが表示されている場合、この引数は無視されます。
ブックに変更があり、マクロを実行しているウィンドウにブックが表示されている場合、
この引数は、次のとおり、保存するかどうかを指定します。
Trueの場合、ブックの変更が保存されます。
ブックに関連付けられたファイル名がない場合、FileName が使用されます。
FileName を省略すると、ファイル名を入力するよう求められます。
False の場合、ブックの変更は保存されません。
省略した場合、変更を保存するかどうかを確認するダイアログ ボックスが表示されます。
Filename
このファイル名で変更を保存します。
RouteWorkbook
ブックを次の受信者にルーティングする必要がない場合 (回覧先がない場合、
または既にルーティングされている場合)、この引数は無視されます。
それ以外の場合は、次のリストのとおり、Microsoft Office Excel がブックをルーティングします。
True の場合、ブックを次のブックに移動(アクティブ化)します。
False の場合、ブックを移動しません(アクティブ化されているブックのままにします)。
省略した場合、ブックを送信するかどうかを確認するダイアログ ボックスが表示されます。
2011年6月6日月曜日
Excel VBA ブックを閉じる方法2
昨日はファイル(ブック)を閉じる方法について調べたが、
保存確認ダイアログが表示されて閉じれない場合があったので、
ダイアログを表示しないで閉じる方法を調べた。
Workbooks.Close(False)
で閉じるらしい。
Dim wb As Workbook
Set wb = Workbooks.Open Filename:="C:\参考資料.xls", ReadOnly:=True
MsgBox "開いた"
'編集処理
wb.Sheets(1).Cells(1, 1).Value = "test"
wb.Close(False)
ダイアログを表示せずに閉じることに成功!!!
他の引数もあるみたいなので、それはまた明日ってことで。
保存確認ダイアログが表示されて閉じれない場合があったので、
ダイアログを表示しないで閉じる方法を調べた。
Workbooks.Close(False)
で閉じるらしい。
Dim wb As Workbook
Set wb = Workbooks.Open Filename:="C:\参考資料.xls", ReadOnly:=True
MsgBox "開いた"
'編集処理
wb.Sheets(1).Cells(1, 1).Value = "test"
wb.Close(False)
ダイアログを表示せずに閉じることに成功!!!
他の引数もあるみたいなので、それはまた明日ってことで。
2011年6月5日日曜日
Excel VBA ブックを閉じる方法
昨日まではファイル(ブック)を開く方法について調べたので、
開いたままだと邪魔になるので、閉じる方法について調べた。
Workbooks.Open Filename:="C:\参考資料.xls", ReadOnly:=True
上記でブックを開いたが…、どうやって閉じるの?
Workbooks.Close
を使ったところ、えらーになってしまった…。
おいおい…、一体どうやって…。と四苦八苦しながら調べてみたところ
Dim wb As Workbook
Set wb = Workbooks.Open Filename:="C:\参考資料.xls", ReadOnly:=True
MsgBox "開いた"
wb.Close
で開いて閉じることに成功!!!
開いたままだと邪魔になるので、閉じる方法について調べた。
Workbooks.Open Filename:="C:\参考資料.xls", ReadOnly:=True
上記でブックを開いたが…、どうやって閉じるの?
Workbooks.Close
を使ったところ、えらーになってしまった…。
おいおい…、一体どうやって…。と四苦八苦しながら調べてみたところ
Dim wb As Workbook
Set wb = Workbooks.Open Filename:="C:\参考資料.xls", ReadOnly:=True
MsgBox "開いた"
wb.Close
で開いて閉じることに成功!!!
2011年6月4日土曜日
Excel VBA ブックを開く方法2
昨日の続きで、Workbook.Openに引数についてまとめた。
色々、調べて自分なりにまとめてみたが…、
分かりにくい引数もある。
これだけの引数があるみたい。
もしかするとExcelのバージョンによっては、もっとあるのかも?
Workbook Open(
Filename,
UpdateLinks,
ReadOnly,
Format,
Password,
WriteResPassword,
IgnoreReadOnlyRecommended,
Origin,
Delimiter,
Editable,
Notify,
Converter,
AddToMru)
FileName
開くブックのファイル名を指定する。
必須
UpdateLinks
リンクの更新方法を指定する。
省略可能
○;更新、×:更新しない
値:外部参照:リモート参照
0:×:×
1:○:×
2:×:○
3:○:○
※そもそも外部参照とリモート参照って何よ?
外部参照とは、ほかのブックへの参照のこと。
リモート参照とは、ほかのアプリケーションのデータへの参照のこと。
ReadOnly
読み取り専用で開く場合は、Trueを設定する。
初期値(未設定の場合)は、Falseになる。
省略可能
Format
テキストファイルを開く場合に区切り文字を指定する。
省略可能
Password
パスワードで保護されたブックを開くために必要なパスワードを指定する。
パスワードが必要なブックを開く際に省略すると、パスワード入力用のダイアログボックスを表示する。
省略可能
パスワードが必要なブックを開く際に省略すると、パスワード入力用のダイアログボックスを表示する。
省略可能
IgnoreReadOnlyRecommended
「読み取り専用を推奨する」を設定して保存されたブックを開くときに、読み取り専用を推奨するメッセージを表示しないようにする場合に、Trueを指定する。
省略可能
Origin
開くファイルがテキストファイルの場合に、どのような形式のテキストファイルかを指定する。
コードページ(文字コード?)とCR/LF(改行コード)を正しく変換するために必要になる。
使用できる定数は、XlPlatform列挙型の xlMacintosh、xlWindows、xlMSDOS のいずれからしい。
この引数を省略すると、使用しているOSの形式が使われるらしい。
省略可能
※個人的には、あまり使用するケースが内容に思うがどうなのだろうか。
Delimiter
開くファイルがテキストファイルで、引数Formatに6が設定されている場合、区切り記号として使う文字を指定する。
タブの場合はChr(9)、コンマの場合は ","、セミコロンの場合は ";" を指定する。
任意の文字を指定することもできるが、文字列を指定した場合は、最初の文字だけが使われる。
省略可能
Editable
開くファイルがMicrosoft Excel 4.0のアドインの場合に、Trueを指定すると、アドインをウィンドウとして表示します。
この引数にFalseを指定、または、省略した場合、アドインは非表示の状態で開きます。
ウィンドウとして表示されません。
この引数は、Microsoft Excel 5.0 以降のアドインには適用できません。
開くファイルがExcel のテンプレートの場合に、True を指定すると、テンプレートを編集用に開きます。
False を指定した場合は、、指定されたテンプレートを基にした、新しいブックを開きます。
初期値(未設定の場合)は、Falseになる。
省略可能
Notify
開こうとしたファイルが読み取り/書き込みモードで開けない場合に、ファイルを通知リストに追加する場合は、Trueを指定する。
ファイルは読み取り専用モードで開かれ、通知リストに追加されます。
ブックが編集可能な状態になった時点で、ユーザーにその旨が通知される。
ファイルが開けない場合に、通知を行わずにエラーを発生させる場合は、Falseを指定するか省略する。
省略可能
Converter
ファイルを開くときに、最初に使うファイルコンバータのインデックス番号を指定する。
指定したファイル コンバータでファイルを変換できない場合は、他のすべてのファイル コンバータでの変換が試みられます。
指定する番号は、FileConvertersプロパティで取得されるファイルコンバータの番号です。
省略可能
AddToMRU
Trueを設定した場合、最近使用したファイルの一覧に開くブックが追加されます。
初期値(未設定の場合)は、Falseになる。
省略可能
色々、調べて自分なりにまとめてみたが…、
分かりにくい引数もある。
これだけの引数があるみたい。
もしかするとExcelのバージョンによっては、もっとあるのかも?
Workbook Open(
Filename,
UpdateLinks,
ReadOnly,
Format,
Password,
WriteResPassword,
IgnoreReadOnlyRecommended,
Origin,
Delimiter,
Editable,
Notify,
Converter,
AddToMru)
FileName
開くブックのファイル名を指定する。
必須
UpdateLinks
リンクの更新方法を指定する。
省略可能
○;更新、×:更新しない
値:外部参照:リモート参照
0:×:×
1:○:×
2:×:○
3:○:○
※そもそも外部参照とリモート参照って何よ?
外部参照とは、ほかのブックへの参照のこと。
リモート参照とは、ほかのアプリケーションのデータへの参照のこと。
ReadOnly
読み取り専用で開く場合は、Trueを設定する。
初期値(未設定の場合)は、Falseになる。
省略可能
Format
テキストファイルを開く場合に区切り文字を指定する。
省略可能
Password
パスワードで保護されたブックを開くために必要なパスワードを指定する。
パスワードが必要なブックを開く際に省略すると、パスワード入力用のダイアログボックスを表示する。
省略可能
WriteResPassword
書き込みを保護されたブックを開くために必要なパスワードを指定する。パスワードが必要なブックを開く際に省略すると、パスワード入力用のダイアログボックスを表示する。
省略可能
「読み取り専用を推奨する」を設定して保存されたブックを開くときに、読み取り専用を推奨するメッセージを表示しないようにする場合に、Trueを指定する。
省略可能
開くファイルがテキストファイルの場合に、どのような形式のテキストファイルかを指定する。
コードページ(文字コード?)とCR/LF(改行コード)を正しく変換するために必要になる。
使用できる定数は、XlPlatform列挙型の xlMacintosh、xlWindows、xlMSDOS のいずれからしい。
この引数を省略すると、使用しているOSの形式が使われるらしい。
省略可能
※個人的には、あまり使用するケースが内容に思うがどうなのだろうか。
開くファイルがテキストファイルで、引数Formatに6が設定されている場合、区切り記号として使う文字を指定する。
タブの場合はChr(9)、コンマの場合は ","、セミコロンの場合は ";" を指定する。
任意の文字を指定することもできるが、文字列を指定した場合は、最初の文字だけが使われる。
省略可能
開くファイルがMicrosoft Excel 4.0のアドインの場合に、Trueを指定すると、アドインをウィンドウとして表示します。
この引数にFalseを指定、または、省略した場合、アドインは非表示の状態で開きます。
ウィンドウとして表示されません。
この引数は、Microsoft Excel 5.0 以降のアドインには適用できません。
開くファイルがExcel のテンプレートの場合に、True を指定すると、テンプレートを編集用に開きます。
False を指定した場合は、、指定されたテンプレートを基にした、新しいブックを開きます。
初期値(未設定の場合)は、Falseになる。
省略可能
開こうとしたファイルが読み取り/書き込みモードで開けない場合に、ファイルを通知リストに追加する場合は、Trueを指定する。
ファイルは読み取り専用モードで開かれ、通知リストに追加されます。
ブックが編集可能な状態になった時点で、ユーザーにその旨が通知される。
ファイルが開けない場合に、通知を行わずにエラーを発生させる場合は、Falseを指定するか省略する。
省略可能
ファイルを開くときに、最初に使うファイルコンバータのインデックス番号を指定する。
指定したファイル コンバータでファイルを変換できない場合は、他のすべてのファイル コンバータでの変換が試みられます。
指定する番号は、FileConvertersプロパティで取得されるファイルコンバータの番号です。
省略可能
Trueを設定した場合、最近使用したファイルの一覧に開くブックが追加されます。
初期値(未設定の場合)は、Falseになる。
省略可能
2011年6月3日金曜日
Excel VBA ブックを開く方法
Excelのマクロを使っていると、他のファイル(ブック)を
開いて、情報(データ)などを参照したいことがよくあるので
調べてみた。
Workbooks.Open "C:\参考資料.xls"
開くだけなら、上記の内容でOKだけど、読み取り専用で
開きたいこともしばしばあるのでこちらも調べてみた。
Workbooks.Open Filename:="C:\参考資料.xls", ReadOnly:=True
上記以外にもパラメータがあるので、別途書いておくことにしようと思う。
開いて、情報(データ)などを参照したいことがよくあるので
調べてみた。
Workbooks.Open "C:\参考資料.xls"
開くだけなら、上記の内容でOKだけど、読み取り専用で
開きたいこともしばしばあるのでこちらも調べてみた。
Workbooks.Open Filename:="C:\参考資料.xls", ReadOnly:=True
上記以外にもパラメータがあるので、別途書いておくことにしようと思う。
2011年6月2日木曜日
Excel VBA フォルダー選択ダイアログ表示関数
フォルダ選択ダイアログを表示したいときに
下記の関数を呼び出すと開きます。
引数(パラメータ)にフォルダのパスを渡すと、
指定したフォルダを表示する。
戻り値は、選択したフォルダのパスになります。
Public Function folderSelect(fpath As String)
Set FS = CreateObject("Scripting.FileSystemObject")
folder = fpath
With Application.FileDialog(msoFileDialogFolderPicker)
If fpath <> "" And FS.FolderExists(fpath) Then
.InitialFileName = fpath
End If
If .Show = True Then
folder = .SelectedItems(1)
End If
End With
folderSelect = folder
End Function
下記の関数を呼び出すと開きます。
引数(パラメータ)にフォルダのパスを渡すと、
指定したフォルダを表示する。
戻り値は、選択したフォルダのパスになります。
Public Function folderSelect(fpath As String)
Set FS = CreateObject("Scripting.FileSystemObject")
folder = fpath
With Application.FileDialog(msoFileDialogFolderPicker)
If fpath <> "" And FS.FolderExists(fpath) Then
.InitialFileName = fpath
End If
If .Show = True Then
folder = .SelectedItems(1)
End If
End With
folderSelect = folder
End Function
2011年6月1日水曜日
Excel VBA ファイルを開いたときにマクロを実行する
ファイルを開いた時点で処理を行いたい場合は、
Visual Basic Editorを開き、プロジェクトエクスプローラー(画面左側)の
ThisWorkbookをダブルクリックする。
コードエディター(画面右側)に下記の内容を記述する。
Private Sub Workbook_Open()
End Sub
Visual Basic Editorを開き、プロジェクトエクスプローラー(画面左側)の
ThisWorkbookをダブルクリックする。
コードエディター(画面右側)に下記の内容を記述する。
Private Sub Workbook_Open()
End Sub
例えばファイルを開いた際に1シート目のシート名を変更したい場合は、
Private Sub Workbook_Open()
ThisWorkbook.Sheets(1).Name = "変更後シート名"
End Sub
ThisWorkbook.Sheets(1).Name = "変更後シート名"
End Sub
2011年5月30日月曜日
Excel VBA マクロ実行時の画面のチラツキをなくす方法
マクロを実行している際に、画面がチラチラして
気になるので制御できないか調べてみた。
マクロの Sub または、 Function を書いた行の次の行へ
Application.ScreenUpdating = False
を記述する。
チラツキがなくなります。
マクロが動いている間は、画面の更新を行わないという
設定みたいです。
気になるので制御できないか調べてみた。
マクロの Sub または、 Function を書いた行の次の行へ
Application.ScreenUpdating = False
を記述する。
チラツキがなくなります。
マクロが動いている間は、画面の更新を行わないという
設定みたいです。
2011年5月29日日曜日
Excel VBA セルの色を変更
A1セルの色を赤くする方法
// RGB関数を使用して設定
Range("A1").Interior.Color = RGB(255, 0, 0)
// ColorIndexを使用して設定
Range("A1").Interior.ColorIndex = 3
// RGB関数を使用して設定
Range("A1").Interior.Color = RGB(255, 0, 0)
// ColorIndexを使用して設定
Range("A1").Interior.ColorIndex = 3
2011年5月28日土曜日
2011年5月27日金曜日
JAVA ファイル分割処理
ファイルを指定した行数で分割するクラスです。
大きなサイズのファイルとか、テキストエディターで
開けなかったりする場合に、使用すると便利です。
public static void main(String[] args) {
}
を実装して使ってみてください。
大きなサイズのファイルとか、テキストエディターで
開けなかったりする場合に、使用すると便利です。
public static void main(String[] args) {
}
を実装して使ってみてください。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class DivideFileClass { public boolean divideFile(File fi, int row) { return this.divideFile(fi, row, "UTF-8", "UTF-8"); } public boolean divideFile(File fi, int row, String iCode, String oCode) { BufferedReader br = null; BufferedWriter bw = null; FileInputStream fis = null; FileOutputStream fos = null; InputStreamReader isr = null; OutputStreamWriter osw = null; String line = null; int count = 0; int fileNo = 1; try { fis = new FileInputStream(fi); isr = new InputStreamReader(fis, iCode); br = new BufferedReader(isr); fos = new FileOutputStream(fi.getPath() + String.valueOf(fileNo)); osw = new OutputStreamWriter(fos, oCode); bw = new BufferedWriter(osw); while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); if (count == row) { bw.close(); fileNo++; fos = new FileOutputStream(fi.getPath() + String.valueOf(fileNo)); osw = new OutputStreamWriter(fos, oCode); bw = new BufferedWriter(osw); count = 0; } count++; } bw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } return true; } }
2011年5月26日木曜日
JAVA ファイル結合処理
複数のテキストファイルを1つのファイルにするクラスです。
ツールとして作成しているため、効率とか考えてません。
public static void main(String[] args) {
}
を実装して使ってみてください。
ツールとして作成しているため、効率とか考えてません。
public static void main(String[] args) {
}
を実装して使ってみてください。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; public class ConcatFileClass { /** * 指定されたディレクトリ(dir)配下のファイルを1つのファイル(f)に結合します。 * @param dir File * @return boolean true : succeeded, false : failed */ public boolean execute(File dir, File f) { return this.execute(dir, f, "SJIS", "SJIS"); } public boolean execute(File dir, File f, String fic, String foc) { BufferedReader br = null; BufferedWriter bw = null; File[] files = null; String line = null; int count = 0; if (dir == null || f == null) { System.out.println("パラメータに誤りがあります。"); return false; } else if (dir.isFile()) { System.out.print(dir.toString()); System.out.println("は、ディレクトリではありません。"); return false; } else if (f.isDirectory()) { System.out.print(f.toString()); System.out.println("は、ファイルではありません。"); return false; // } else if (f.canWrite()) { // System.out.print(f.toString()); // System.out.println("は、書き込み可能ファイルではありません。"); // return false; } else if (!dir.exists()) { System.out.println("ディレクトリが存在しません。"); return false; } try { files = dir.listFiles(); if (files == null || files.length == 1) { System.out.println("結合するファイルが存在しません。"); return false; } bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), foc)); count = files.length; for (int i = 0; i < count; i++) { br = new BufferedReader(new InputStreamReader(new FileInputStream(files[i]), fic)); while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); } br.close(); } bw.close(); } catch (FileNotFoundException e) { System.out.println("ファイルが見つかりません。"); return false; } catch (UnsupportedEncodingException e) { System.out.println("文字コードがサポートされていません。"); return false; } catch (IOException e) { System.out.println("入出力でエラーが発生しました。"); return false; } return true; } }
2011年5月25日水曜日
JAVA ファイルの文字コード変換
ファイルの文字コードを変換するクラスです。
ツールとして作成しているため、効率とか考えてません。
public static void main(String[] args) {
}
を実装して使ってみてください。
ツールとして作成しているため、効率とか考えてません。
public static void main(String[] args) {
}
を実装して使ってみてください。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; public class ChangeCodeClass { /** * 入力ファイル(input)の文字コード(fic)を文字コード(foc)で出力ファイル(output)を作成する * @param fi input file * @param fic input file's code * @param fo output file * @param foc output file's code * @return boolean true : succeeded, false : failed */ public boolean changeCode(File fi, String fic, File fo, String foc) { BufferedReader br = null; BufferedWriter bw = null; String line = null; if (fi == null || fo == null || fic == null || fic.equals("") || foc == null || foc.equals("")) { System.out.println("パラメータに誤りがあります。"); return false; } else if (fi.isDirectory() || fo.isDirectory()) { System.out.println("ファイルではありません。"); return false; // } else if (!fi.canRead() || !fo.canWrite()) { // System.out.println("読み込みまたは、書き込みが出来ません。"); // return false; } else if (!fi.exists()) { System.out.println("入力ファイルが存在しません。"); return false; } else if (fo.exists()) { System.out.println("出力ファイルと同名のファイルが存在します。"); return false; } else if (fi.getPath().equals(fo.getPath())) { System.out.println("入力ファイルと出力ファイルが同一のパスです。"); return false; } try { br = new BufferedReader(new InputStreamReader(new FileInputStream(fi), fic)); bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fo), foc)); while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); } bw.close(); br.close(); } catch (FileNotFoundException e) { System.out.println("ファイルが見つかりません。"); return false; } catch (UnsupportedEncodingException e) { System.out.println("文字コードがサポートされていません。"); return false; } catch (IOException e) { System.out.println("入出力でエラーが発生しました。"); return false; } return true; } }
2011年5月24日火曜日
Windows フォルダの権限を確認したい場合のコマンド
[windowsボタン] + R
ファイル名を指定して実行ダイアログが表示される。
cmd
と入力し、Enter!!
コマンドプロンプトが立ち上がるので
cd "移動しだいパスを指定"
for /F %A in ('dir /b /ad') do cacls "%A" /C
ファイル名を指定して実行ダイアログが表示される。
cmd
と入力し、Enter!!
コマンドプロンプトが立ち上がるので
cd "移動しだいパスを指定"
for /F %A in ('dir /b /ad') do cacls "%A" /C
2011年5月23日月曜日
Excel VBA ファイル選択ダイアログ表示編
Public Function fileSelect(fpath As String)
Set FS = CreateObject("Scripting.FileSystemObject")
file = fpath
With Application.FileDialog(msoFileDialogFilePicker)
If fpath <> "" And FS.FileExists(fpath) Then
.InitialFileName = FS.GetParentFolderName(fpath)
End If
If .Show = True Then
file = .SelectedItems(1)
End If
End With
fileSelect = file
End Function
Set FS = CreateObject("Scripting.FileSystemObject")
file = fpath
With Application.FileDialog(msoFileDialogFilePicker)
If fpath <> "" And FS.FileExists(fpath) Then
.InitialFileName = FS.GetParentFolderName(fpath)
End If
If .Show = True Then
file = .SelectedItems(1)
End If
End With
fileSelect = file
End Function
2011年5月22日日曜日
Eclipse SVN ユーザ情報退避バッチ編
@ECHO OFF
ECHO SVNユーザ情報退避処理
ECHO ユーザ:%USERNAME%
REM 初期設定
SET DASDir="C:\Documents and Settings\%USERNAME%"
SET SVNUsr="C:\Documents and Settings\%USERNAME%\Application Data\Subversion\auth\svn.simple\"
SET 標準="%DASDir%\SVN標準"
SET 管理="%DASDir%\SVN管理"
SET 宛先=""
:START
SET /P INPUT=退避するユーザ(現在の状況)を指定 [1:標準ユーザ 2:管理ユーザ 9:終了] :
IF %INPUT% EQU 1 (
SET 宛先=%標準%
GOTO DOCOPY
)
IF %INPUT% EQU 2 (
SET 宛先=%管理%
GOTO DOCOPY
)
IF %INPUT% EQU 9 (
GOTO END
)
SET INPUT=""
GOTO START
:DOCOPY
IF NOT EXIST %標準% (
ECHO 標準ユーザ情報退避フォルダ作成
MKDIR %標準%
)
IF NOT EXIST %管理% (
ECHO 管理ユーザ情報退避フォルダ作成
MKDIR %管理%
)
ECHO ユーザ情報退避処理
CD %SVNUsr%
COPY ファイル名 %宛先%
:END
PAUSE
ECHO SVNユーザ情報退避処理
ECHO ユーザ:%USERNAME%
REM 初期設定
SET DASDir="C:\Documents and Settings\%USERNAME%"
SET SVNUsr="C:\Documents and Settings\%USERNAME%\Application Data\Subversion\auth\svn.simple\"
SET 標準="%DASDir%\SVN標準"
SET 管理="%DASDir%\SVN管理"
SET 宛先=""
:START
SET /P INPUT=退避するユーザ(現在の状況)を指定 [1:標準ユーザ 2:管理ユーザ 9:終了] :
IF %INPUT% EQU 1 (
SET 宛先=%標準%
GOTO DOCOPY
)
IF %INPUT% EQU 2 (
SET 宛先=%管理%
GOTO DOCOPY
)
IF %INPUT% EQU 9 (
GOTO END
)
SET INPUT=""
GOTO START
:DOCOPY
IF NOT EXIST %標準% (
ECHO 標準ユーザ情報退避フォルダ作成
MKDIR %標準%
)
IF NOT EXIST %管理% (
ECHO 管理ユーザ情報退避フォルダ作成
MKDIR %管理%
)
ECHO ユーザ情報退避処理
CD %SVNUsr%
COPY ファイル名 %宛先%
:END
PAUSE
2011年5月21日土曜日
Excel VBA Java用定数クラス作成マクロ UTF-8(BOM無)編
<エクセルのレイアウト>
3行目
B列 区分名
C列 値
D列 名称
E列 型(String等)
F列 配列 ○:配列値行番号使用、◎:配列値直接入力使用
G列 配列値行番号
H列 配列値直接入力
4行目以降 は値
<マクロの内容>
Option Explicit
Private Const 入力開始行 = 4
Private Const 区分名列 = 2
Private Const 値列 = 3
Private Const 名称列 = 4
Private Const 型列 = 5
Private Const 配列列 = 6
Private Const 配列値行番号列 = 7
Private Const 配列値直接入力列 = 8
Private Const 囲む列 = 9
Private Sub CommandButton1_Click()
Dim maxRow As Integer ' 最終行番号
Dim outRow As Integer ' 出力行
Dim tmpFileName As String ' 一時ファイル名
Dim fileName As String ' ファイル名
Dim i, j, k, cnt As Integer
Dim tmpFile As ADODB.Stream ' 一時ファイル出力用ストリーム
Dim readFile As ADODB.Stream ' ファイル読込用ストリーム
Dim writeFile As ADODB.Stream ' ファイル出力用ストリーム
Dim wStr As String ' ワーク文字
Dim 配列値行番号() As String
Dim 配列値直接入力() As String
Dim 行番号, 直接入力 As Variant
'最終行取得
maxRow = ActiveSheet.Range("B65536").End(xlUp).Row
'入力開始位置確認
If maxRow < 入力開始行 Then
MsgBox "値が入力されていません。"
Exit Sub
End If
'一時ファイル出力処理
Set tmpFile = CreateObject("ADODB.Stream")
'文字コード設定
tmpFile.Charset = "UTF-8"
'ファイルオープン
tmpFile.Open
'バッファに出力
tmpFile.WriteText "/******************************************************************", adWriteLine
tmpFile.WriteText " * モジュール名", adWriteLine
tmpFile.WriteText " * " & Range("B1").Value, adWriteLine
tmpFile.WriteText " *", adWriteLine
tmpFile.WriteText " * 変更履歴", adWriteLine
tmpFile.WriteText " * 変更日 変更者 変更概要", adWriteLine
tmpFile.WriteText " * YYYY/MM/DD 氏 名 新規作成", adWriteLine
tmpFile.WriteText " ******************************************************************", adWriteLine
tmpFile.WriteText " */", adWriteLine
tmpFile.WriteText "", adWriteLine
tmpFile.WriteText "package jp.co.xxx.common.constant;", adWriteLine
tmpFile.WriteText "", adWriteLine
tmpFile.WriteText "/**", adWriteLine
tmpFile.WriteText " * 共通定数", adWriteLine
tmpFile.WriteText " * <p>", adWriteLine
tmpFile.WriteText " * 使用する定数を定義する", adWriteLine
tmpFile.WriteText " * </p>", adWriteLine
tmpFile.WriteText " */", adWriteLine
tmpFile.WriteText "public class " & Range("B1").Value & " {", adWriteLine
' 開始行を設定
outRow = 入力開始行
' 最終行まで繰り返す
Do Until outRow > maxRow
tmpFile.WriteText vbTab & "/**", adWriteLine
'コメントの出力 開始
tmpFile.WriteText vbTab & " * " & Cells(outRow, 区分名列).Value & "の定数です。", adWriteLine
tmpFile.WriteText vbTab & " */", adWriteLine
'コメントの出力 終了
If Cells(outRow, 配列列).Value <> "" Then
wStr = "public static final " & Cells(outRow, 型列).Value _
& " C_" & Cells(outRow, 区分名列) & "_" _
& Cells(outRow, 名称列).Value & " = {"
tmpFile.WriteText vbTab & wStr
cnt = LenB(StrConv(wStr, vbFromUnicode)) / 4
If (LenB(wStr) Mod 4) > 0 Then
cnt = cnt + 1
End If
wStr = ""
For k = 1 To cnt
wStr = wStr & vbTab
Next k
If Cells(outRow, 配列列).Value = "○" Then
配列値行番号 = Split(Cells(outRow, 配列値行番号列).Value, ",", , vbTextCompare)
i = UBound(配列値行番号)
j = 0
For Each 行番号 In 配列値行番号
If j > 0 Then
tmpFile.WriteText wStr
End If
tmpFile.WriteText "C_"
tmpFile.WriteText Cells(Int(行番号), 区分名列).Value
tmpFile.WriteText "_"
tmpFile.WriteText Cells(Int(行番号), 名称列).Value
If j < i Then
tmpFile.WriteText ", ", adWriteLine
End If
j = j + 1
Next
ElseIf Cells(outRow, 配列列).Value = "◎" Then
配列値直接入力 = Split(Cells(outRow, 配列値直接入力列).Value, ",", , vbTextCompare)
i = UBound(配列値直接入力)
j = 0
For Each 直接入力 In 配列値直接入力
If j > 0 Then
tmpFile.WriteText wStr
End If
If Cells(outRow, 囲む列).Value <> "" Then
tmpFile.WriteText """"
End If
tmpFile.WriteText 直接入力
If Cells(outRow, 囲む列).Value <> "" Then
tmpFile.WriteText """"
End If
If j < i Then
tmpFile.WriteText ", ", adWriteLine
End If
j = j + 1
Next
End If
tmpFile.WriteText "};", adWriteLine
tmpFile.WriteText "", adWriteLine
Else
tmpFile.WriteText vbTab & "public static final "
tmpFile.WriteText Cells(outRow, 型列).Value
tmpFile.WriteText " C_"
tmpFile.WriteText Cells(outRow, 区分名列)
tmpFile.WriteText "_"
tmpFile.WriteText Cells(outRow, 名称列).Value
tmpFile.WriteText " = "
If Cells(outRow, 型列).Value = "String" Then
tmpFile.WriteText """"
End If
wStr = Cells(outRow, 値列).Value
wStr = Replace(wStr, "半角空白", " ", , , vbTextCompare)
wStr = Replace(wStr, """", "", , , vbTextCompare)
tmpFile.WriteText wStr
If Cells(outRow, 型列).Value = "String" Then
tmpFile.WriteText """"
End If
tmpFile.WriteText ";", adWriteLine
tmpFile.WriteText "", adWriteLine
End If ' 行を加算
outRow = outRow + 1
Loop
tmpFile.WriteText "", adWriteLine
tmpFile.WriteText vbTab & "/**", adWriteLine
tmpFile.WriteText vbTab & " * コンストラクタ", adWriteLine
tmpFile.WriteText vbTab & " */", adWriteLine
tmpFile.WriteText vbTab & "private " & Range("B1").Value & "() {", adWriteLine
tmpFile.WriteText vbTab, adWriteLine
tmpFile.WriteText vbTab & "}", adWriteLine
tmpFile.WriteText "}", adWriteLine
'ファイル名設定
tmpFileName = ThisWorkbook.Path & "\tmp" & Range("B1").Value & ".java"
fileName = ThisWorkbook.Path & "\" & Range("B1").Value & ".java"
'一時ファイルに書き込み
tmpFile.SaveToFile tmpFileName, adSaveCreateOverWrite
'一時ファイルをクローズ
tmpFile.Close
Set tmpFile = Nothing
'ここからBOM除去処理
'一時ファイルの4バイト目から読み込む
Set readFile = CreateObject("ADODB.Stream")
readFile.Open
readFile.Type = adTypeBinary
readFile.LoadFromFile (tmpFileName)
readFile.Position = 3
'出力ファイルをオープン
Set writeFile = CreateObject("ADODB.Stream")
writeFile.Open
writeFile.Type = adTypeBinary
'読み込んだデータをそのままファイルに出力する(4バイト目以降を出力)
writeFile.Write (readFile.Read(adReadAll))
writeFile.SaveToFile fileName, adSaveCreateOverWrite
'ファイルをクローズ
writeFile.Close
Set writeFile = Nothing
readFile.Close
Set readFile = Nothing
'一時ファイル削除
Kill tmpFileName
End Sub
3行目
B列 区分名
C列 値
D列 名称
E列 型(String等)
F列 配列 ○:配列値行番号使用、◎:配列値直接入力使用
G列 配列値行番号
H列 配列値直接入力
4行目以降 は値
<マクロの内容>
Option Explicit
Private Const 入力開始行 = 4
Private Const 区分名列 = 2
Private Const 値列 = 3
Private Const 名称列 = 4
Private Const 型列 = 5
Private Const 配列列 = 6
Private Const 配列値行番号列 = 7
Private Const 配列値直接入力列 = 8
Private Const 囲む列 = 9
Private Sub CommandButton1_Click()
Dim maxRow As Integer ' 最終行番号
Dim outRow As Integer ' 出力行
Dim tmpFileName As String ' 一時ファイル名
Dim fileName As String ' ファイル名
Dim i, j, k, cnt As Integer
Dim tmpFile As ADODB.Stream ' 一時ファイル出力用ストリーム
Dim readFile As ADODB.Stream ' ファイル読込用ストリーム
Dim writeFile As ADODB.Stream ' ファイル出力用ストリーム
Dim wStr As String ' ワーク文字
Dim 配列値行番号() As String
Dim 配列値直接入力() As String
Dim 行番号, 直接入力 As Variant
'最終行取得
maxRow = ActiveSheet.Range("B65536").End(xlUp).Row
'入力開始位置確認
If maxRow < 入力開始行 Then
MsgBox "値が入力されていません。"
Exit Sub
End If
'一時ファイル出力処理
Set tmpFile = CreateObject("ADODB.Stream")
'文字コード設定
tmpFile.Charset = "UTF-8"
'ファイルオープン
tmpFile.Open
'バッファに出力
tmpFile.WriteText "/******************************************************************", adWriteLine
tmpFile.WriteText " * モジュール名", adWriteLine
tmpFile.WriteText " * " & Range("B1").Value, adWriteLine
tmpFile.WriteText " *", adWriteLine
tmpFile.WriteText " * 変更履歴", adWriteLine
tmpFile.WriteText " * 変更日 変更者 変更概要", adWriteLine
tmpFile.WriteText " * YYYY/MM/DD 氏 名 新規作成", adWriteLine
tmpFile.WriteText " ******************************************************************", adWriteLine
tmpFile.WriteText " */", adWriteLine
tmpFile.WriteText "", adWriteLine
tmpFile.WriteText "package jp.co.xxx.common.constant;", adWriteLine
tmpFile.WriteText "", adWriteLine
tmpFile.WriteText "/**", adWriteLine
tmpFile.WriteText " * 共通定数", adWriteLine
tmpFile.WriteText " * <p>", adWriteLine
tmpFile.WriteText " * 使用する定数を定義する", adWriteLine
tmpFile.WriteText " * </p>", adWriteLine
tmpFile.WriteText " */", adWriteLine
tmpFile.WriteText "public class " & Range("B1").Value & " {", adWriteLine
' 開始行を設定
outRow = 入力開始行
' 最終行まで繰り返す
Do Until outRow > maxRow
tmpFile.WriteText vbTab & "/**", adWriteLine
'コメントの出力 開始
tmpFile.WriteText vbTab & " * " & Cells(outRow, 区分名列).Value & "の定数です。", adWriteLine
tmpFile.WriteText vbTab & " */", adWriteLine
'コメントの出力 終了
If Cells(outRow, 配列列).Value <> "" Then
wStr = "public static final " & Cells(outRow, 型列).Value _
& " C_" & Cells(outRow, 区分名列) & "_" _
& Cells(outRow, 名称列).Value & " = {"
tmpFile.WriteText vbTab & wStr
cnt = LenB(StrConv(wStr, vbFromUnicode)) / 4
If (LenB(wStr) Mod 4) > 0 Then
cnt = cnt + 1
End If
wStr = ""
For k = 1 To cnt
wStr = wStr & vbTab
Next k
If Cells(outRow, 配列列).Value = "○" Then
配列値行番号 = Split(Cells(outRow, 配列値行番号列).Value, ",", , vbTextCompare)
i = UBound(配列値行番号)
j = 0
For Each 行番号 In 配列値行番号
If j > 0 Then
tmpFile.WriteText wStr
End If
tmpFile.WriteText "C_"
tmpFile.WriteText Cells(Int(行番号), 区分名列).Value
tmpFile.WriteText "_"
tmpFile.WriteText Cells(Int(行番号), 名称列).Value
If j < i Then
tmpFile.WriteText ", ", adWriteLine
End If
j = j + 1
Next
ElseIf Cells(outRow, 配列列).Value = "◎" Then
配列値直接入力 = Split(Cells(outRow, 配列値直接入力列).Value, ",", , vbTextCompare)
i = UBound(配列値直接入力)
j = 0
For Each 直接入力 In 配列値直接入力
If j > 0 Then
tmpFile.WriteText wStr
End If
If Cells(outRow, 囲む列).Value <> "" Then
tmpFile.WriteText """"
End If
tmpFile.WriteText 直接入力
If Cells(outRow, 囲む列).Value <> "" Then
tmpFile.WriteText """"
End If
If j < i Then
tmpFile.WriteText ", ", adWriteLine
End If
j = j + 1
Next
End If
tmpFile.WriteText "};", adWriteLine
tmpFile.WriteText "", adWriteLine
Else
tmpFile.WriteText vbTab & "public static final "
tmpFile.WriteText Cells(outRow, 型列).Value
tmpFile.WriteText " C_"
tmpFile.WriteText Cells(outRow, 区分名列)
tmpFile.WriteText "_"
tmpFile.WriteText Cells(outRow, 名称列).Value
tmpFile.WriteText " = "
If Cells(outRow, 型列).Value = "String" Then
tmpFile.WriteText """"
End If
wStr = Cells(outRow, 値列).Value
wStr = Replace(wStr, "半角空白", " ", , , vbTextCompare)
wStr = Replace(wStr, """", "", , , vbTextCompare)
tmpFile.WriteText wStr
If Cells(outRow, 型列).Value = "String" Then
tmpFile.WriteText """"
End If
tmpFile.WriteText ";", adWriteLine
tmpFile.WriteText "", adWriteLine
End If ' 行を加算
outRow = outRow + 1
Loop
tmpFile.WriteText "", adWriteLine
tmpFile.WriteText vbTab & "/**", adWriteLine
tmpFile.WriteText vbTab & " * コンストラクタ", adWriteLine
tmpFile.WriteText vbTab & " */", adWriteLine
tmpFile.WriteText vbTab & "private " & Range("B1").Value & "() {", adWriteLine
tmpFile.WriteText vbTab, adWriteLine
tmpFile.WriteText vbTab & "}", adWriteLine
tmpFile.WriteText "}", adWriteLine
'ファイル名設定
tmpFileName = ThisWorkbook.Path & "\tmp" & Range("B1").Value & ".java"
fileName = ThisWorkbook.Path & "\" & Range("B1").Value & ".java"
'一時ファイルに書き込み
tmpFile.SaveToFile tmpFileName, adSaveCreateOverWrite
'一時ファイルをクローズ
tmpFile.Close
Set tmpFile = Nothing
'ここからBOM除去処理
'一時ファイルの4バイト目から読み込む
Set readFile = CreateObject("ADODB.Stream")
readFile.Open
readFile.Type = adTypeBinary
readFile.LoadFromFile (tmpFileName)
readFile.Position = 3
'出力ファイルをオープン
Set writeFile = CreateObject("ADODB.Stream")
writeFile.Open
writeFile.Type = adTypeBinary
'読み込んだデータをそのままファイルに出力する(4バイト目以降を出力)
writeFile.Write (readFile.Read(adReadAll))
writeFile.SaveToFile fileName, adSaveCreateOverWrite
'ファイルをクローズ
writeFile.Close
Set writeFile = Nothing
readFile.Close
Set readFile = Nothing
'一時ファイル削除
Kill tmpFileName
End Sub
2011年5月20日金曜日
Eclipse SVN ユーザ情報変更編
@ECHO OFF
ECHO Eclipseのユーザ切り替えバッチ
REM 初期設定
SET DASDir="C:\Documents and Settings\%USERNAME%"
SET SVNUsr="C:\Documents and Settings\%USERNAME%\Application Data\Subversion\auth\svn.simple\"
SET 標準="%DASDir%\SVN標準"
SET 管理="%DASDir%\SVN管理"
SET 複写元=""
:START
COLOR 0a
SET /P INPUT=使用するユーザを指定 [1:標準ユーザ, 2:管理ユーザ, 9:終了] :
IF %INPUT% EQU 1 (
SET 複写元=%標準%
GOTO DOCOPY
)
IF %INPUT% EQU 2 (
SET 複写元=%管理%
GOTO DOCOPY
)
IF %INPUT% EQU 9 (
GOTO END
)
COLOR 0C
ECHO 入力した値が正しくありません。
ECHO 再度入力してください。
PAUSE
GOTO START
:DOCOPY
CD %複写元%
COPY ファイル名 %SVNUsr%
PAUSE
EXIT
:END
PAUSE
ECHO Eclipseのユーザ切り替えバッチ
REM 初期設定
SET DASDir="C:\Documents and Settings\%USERNAME%"
SET SVNUsr="C:\Documents and Settings\%USERNAME%\Application Data\Subversion\auth\svn.simple\"
SET 標準="%DASDir%\SVN標準"
SET 管理="%DASDir%\SVN管理"
SET 複写元=""
:START
COLOR 0a
SET /P INPUT=使用するユーザを指定 [1:標準ユーザ, 2:管理ユーザ, 9:終了] :
IF %INPUT% EQU 1 (
SET 複写元=%標準%
GOTO DOCOPY
)
IF %INPUT% EQU 2 (
SET 複写元=%管理%
GOTO DOCOPY
)
IF %INPUT% EQU 9 (
GOTO END
)
COLOR 0C
ECHO 入力した値が正しくありません。
ECHO 再度入力してください。
PAUSE
GOTO START
:DOCOPY
CD %複写元%
COPY ファイル名 %SVNUsr%
PAUSE
EXIT
:END
PAUSE
2011年5月19日木曜日
Excel VBA ファイル出力
参照設定でMicrosoft Scripting Runtimeを設定した場合
Dim FSO As New FileSystemObject
Dim TS As TextStream
Set TS = FSO.CreateTextFile("c:\a.txt")
TS.WriteLine "文字を出力"
TS.Close
Set TS = Nothing
Set FSO = Nothing
参照設定をしない場合
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TS = FSO.CreateTextFile("c:\a2.txt")
TS.WriteLine "文字を出力"
TS.Close
Set TS = Nothing
Set FSO = Nothing
Excel VBA Java用定数クラス作成マクロ編
<エクセルのレイアウト>
3行目
B列 区分名
C列 値
D列 名称
E列 型(String等)
F列 配列 ○:配列値行番号使用、◎:配列値直接入力使用
G列 配列値行番号
H列 配列値直接入力
4行目以降は値
<マクロの内容>
Option Explicit
Private Const 入力開始行 = 4
Private Const 区分名列 = 2
Private Const 値列 = 3
Private Const 名称列 = 4
Private Const 型列 = 5
Private Const 配列列 = 6
Private Const 配列値行番号列 = 7
Private Const 配列値直接入力列 = 8
Private Const 囲む列 = 9
Private Sub クラス作成_Click()
Dim maxRow As Integer ' 最終行番号
Dim outRow As Integer ' 出力行
Dim i, j, k, cnt As Integer
Dim wStr As String ' ワーク文字
Dim TS As TextStream ' TextStream
Dim FSO As New FileSystemObject ' FileSystemObject
Dim 配列値行番号() As String
Dim 配列値直接入力() As String
Dim 行番号, 直接入力 As Variant
'最終行取得
maxRow = ActiveSheet.Range("B65536").End(xlUp).Row
'入力開始位置確認
If maxRow < 入力開始行 Then
MsgBox "値が入力されていません。"
Exit Sub
End If
Set TS = FSO.CreateTextFile( _
fileName:=ThisWorkbook.Path & "\" & Range("B1").Value & ".java", _
Overwrite:=True)
TS.WriteLine "/******************************************************************"
TS.WriteLine " * モジュール名"
TS.WriteLine " * " & Range("B1").Value & ".java"
TS.WriteLine " *"
TS.WriteLine " * 変更履歴"
TS.WriteLine " * 日付 変更者 変更概要"
TS.WriteLine " * YYYY/MM/DD 氏 名 新規作成"
TS.WriteLine " ******************************************************************"
TS.WriteLine " */"
TS.WriteLine
TS.WriteLine "package jp.co.xxx.common.constant;"
TS.WriteLine
TS.WriteLine "/**"
TS.WriteLine " * 共通定数"
TS.WriteLine " * <p>"
TS.WriteLine " * 使用する定数を定義する"
TS.WriteLine " * </p>"
TS.WriteLine " */"
TS.WriteLine "public class " & Range("B1").Value & " {"
' 開始行を設定
outRow = 入力開始行
' 最終行まで繰り返す
Do Until outRow > maxRow
TS.WriteLine vbTab & "/**"
'コメントの出力 開始
TS.WriteLine vbTab & " * " & Cells(outRow, 区分名列).Value & "の" & Replace(Cells(outRow, 名称列).Value, "J_", "", , , vbTextCompare) & "の定数です。"
TS.WriteLine vbTab & " */"
'コメントの出力 終了
If Cells(outRow, 配列列).Value <> "" Then
wStr = "public static final " & Cells(outRow, 型列).Value _
& " C_" & Cells(outRow, 区分名列) & "_" _
& Cells(outRow, 名称列).Value & " = {"
TS.Write vbTab & wStr
cnt = LenB(StrConv(wStr, vbFromUnicode)) / 4
If (LenB(wStr) Mod 4) > 0 Then
cnt = cnt + 1
End If
wStr = ""
For k = 1 To cnt
wStr = wStr & vbTab
Next k
If Cells(outRow, 配列列).Value = "○" Then
配列値行番号 = Split(Cells(outRow, 配列値行番号列).Value, ",", , vbTextCompare)
i = UBound(配列値行番号)
j = 0
For Each 行番号 In 配列値行番号
If j > 0 Then
TS.Write wStr
End If
TS.Write "C_"
TS.Write Cells(Int(行番号), 区分名列).Value
TS.Write "_"
TS.Write Cells(Int(行番号), 名称列).Value
If j < i Then
TS.WriteLine ", "
End If
j = j + 1
Next
ElseIf Cells(outRow, 配列列).Value = "◎" Then
配列値直接入力 = Split(Cells(outRow, 配列値直接入力列).Value, ",", , vbTextCompare)
i = UBound(配列値直接入力)
j = 0
For Each 直接入力 In 配列値直接入力
If j > 0 Then
TS.Write wStr
End If
If Cells(outRow, 囲む列).Value <> "" Then
TS.Write """"
End If
TS.Write 直接入力
If Cells(outRow, 囲む列).Value <> "" Then
TS.Write """"
End If
If j < i Then
TS.WriteLine ", "
End If
j = j + 1
Next
End If
TS.WriteLine "};"
TS.WriteLine
Else
TS.Write vbTab & "public static final "
TS.Write Cells(outRow, 型列).Value
TS.Write " C_"
TS.Write Cells(outRow, 区分名列)
TS.Write "_"
TS.Write Cells(outRow, 名称列).Value
TS.Write " = "
If Cells(outRow, 型列).Value = "String" Then
TS.Write """"
End If
wStr = Cells(outRow, 値列).Value
wStr = Replace(wStr, "半角空白", " ", , , vbTextCompare)
wStr = Replace(wStr, """", "", , , vbTextCompare)
TS.Write wStr
If Cells(outRow, 型列).Value = "String" Then
TS.Write """"
End If
TS.WriteLine ";"
TS.WriteLine
End If
' 行を加算
outRow = outRow + 1
Loop
TS.WriteLine
TS.WriteLine vbTab & "/**"
TS.WriteLine vbTab & " * コンストラクタ"
TS.WriteLine vbTab & " */"
TS.WriteLine vbTab & "private " & Range("B1").Value & "() {"
TS.WriteLine vbTab
TS.WriteLine vbTab & "}"
TS.WriteLine "}"
' 指定ファイルをCLOSE
TS.Close
Set TS = Nothing
Set FSO = Nothing
End Sub
3行目
B列 区分名
C列 値
D列 名称
E列 型(String等)
F列 配列 ○:配列値行番号使用、◎:配列値直接入力使用
G列 配列値行番号
H列 配列値直接入力
4行目以降は値
<マクロの内容>
Option Explicit
Private Const 入力開始行 = 4
Private Const 区分名列 = 2
Private Const 値列 = 3
Private Const 名称列 = 4
Private Const 型列 = 5
Private Const 配列列 = 6
Private Const 配列値行番号列 = 7
Private Const 配列値直接入力列 = 8
Private Const 囲む列 = 9
Private Sub クラス作成_Click()
Dim maxRow As Integer ' 最終行番号
Dim outRow As Integer ' 出力行
Dim i, j, k, cnt As Integer
Dim wStr As String ' ワーク文字
Dim TS As TextStream ' TextStream
Dim FSO As New FileSystemObject ' FileSystemObject
Dim 配列値行番号() As String
Dim 配列値直接入力() As String
Dim 行番号, 直接入力 As Variant
'最終行取得
maxRow = ActiveSheet.Range("B65536").End(xlUp).Row
'入力開始位置確認
If maxRow < 入力開始行 Then
MsgBox "値が入力されていません。"
Exit Sub
End If
Set TS = FSO.CreateTextFile( _
fileName:=ThisWorkbook.Path & "\" & Range("B1").Value & ".java", _
Overwrite:=True)
TS.WriteLine "/******************************************************************"
TS.WriteLine " * モジュール名"
TS.WriteLine " * " & Range("B1").Value & ".java"
TS.WriteLine " *"
TS.WriteLine " * 変更履歴"
TS.WriteLine " * 日付 変更者 変更概要"
TS.WriteLine " * YYYY/MM/DD 氏 名 新規作成"
TS.WriteLine " ******************************************************************"
TS.WriteLine " */"
TS.WriteLine
TS.WriteLine "package jp.co.xxx.common.constant;"
TS.WriteLine
TS.WriteLine "/**"
TS.WriteLine " * 共通定数"
TS.WriteLine " * <p>"
TS.WriteLine " * 使用する定数を定義する"
TS.WriteLine " * </p>"
TS.WriteLine " */"
TS.WriteLine "public class " & Range("B1").Value & " {"
' 開始行を設定
outRow = 入力開始行
' 最終行まで繰り返す
Do Until outRow > maxRow
TS.WriteLine vbTab & "/**"
'コメントの出力 開始
TS.WriteLine vbTab & " * " & Cells(outRow, 区分名列).Value & "の" & Replace(Cells(outRow, 名称列).Value, "J_", "", , , vbTextCompare) & "の定数です。"
TS.WriteLine vbTab & " */"
'コメントの出力 終了
If Cells(outRow, 配列列).Value <> "" Then
wStr = "public static final " & Cells(outRow, 型列).Value _
& " C_" & Cells(outRow, 区分名列) & "_" _
& Cells(outRow, 名称列).Value & " = {"
TS.Write vbTab & wStr
cnt = LenB(StrConv(wStr, vbFromUnicode)) / 4
If (LenB(wStr) Mod 4) > 0 Then
cnt = cnt + 1
End If
wStr = ""
For k = 1 To cnt
wStr = wStr & vbTab
Next k
If Cells(outRow, 配列列).Value = "○" Then
配列値行番号 = Split(Cells(outRow, 配列値行番号列).Value, ",", , vbTextCompare)
i = UBound(配列値行番号)
j = 0
For Each 行番号 In 配列値行番号
If j > 0 Then
TS.Write wStr
End If
TS.Write "C_"
TS.Write Cells(Int(行番号), 区分名列).Value
TS.Write "_"
TS.Write Cells(Int(行番号), 名称列).Value
If j < i Then
TS.WriteLine ", "
End If
j = j + 1
Next
ElseIf Cells(outRow, 配列列).Value = "◎" Then
配列値直接入力 = Split(Cells(outRow, 配列値直接入力列).Value, ",", , vbTextCompare)
i = UBound(配列値直接入力)
j = 0
For Each 直接入力 In 配列値直接入力
If j > 0 Then
TS.Write wStr
End If
If Cells(outRow, 囲む列).Value <> "" Then
TS.Write """"
End If
TS.Write 直接入力
If Cells(outRow, 囲む列).Value <> "" Then
TS.Write """"
End If
If j < i Then
TS.WriteLine ", "
End If
j = j + 1
Next
End If
TS.WriteLine "};"
TS.WriteLine
Else
TS.Write vbTab & "public static final "
TS.Write Cells(outRow, 型列).Value
TS.Write " C_"
TS.Write Cells(outRow, 区分名列)
TS.Write "_"
TS.Write Cells(outRow, 名称列).Value
TS.Write " = "
If Cells(outRow, 型列).Value = "String" Then
TS.Write """"
End If
wStr = Cells(outRow, 値列).Value
wStr = Replace(wStr, "半角空白", " ", , , vbTextCompare)
wStr = Replace(wStr, """", "", , , vbTextCompare)
TS.Write wStr
If Cells(outRow, 型列).Value = "String" Then
TS.Write """"
End If
TS.WriteLine ";"
TS.WriteLine
End If
' 行を加算
outRow = outRow + 1
Loop
TS.WriteLine
TS.WriteLine vbTab & "/**"
TS.WriteLine vbTab & " * コンストラクタ"
TS.WriteLine vbTab & " */"
TS.WriteLine vbTab & "private " & Range("B1").Value & "() {"
TS.WriteLine vbTab
TS.WriteLine vbTab & "}"
TS.WriteLine "}"
' 指定ファイルをCLOSE
TS.Close
Set TS = Nothing
Set FSO = Nothing
End Sub
2011年5月18日水曜日
teratermマクロ ログファイル出力編
; 日時の取得とファイル名に使用出来るように組み替え
getdate W_DATE
gettime W_TIME
strcopy W_DATE 1 4 nen
strcopy W_DATE 6 2 gatu
strcopy W_DATE 9 2 hi
strcopy W_TIME 1 2 nanji
strcopy W_TIME 4 2 nanfun
strcopy W_TIME 7 2 nanbyou
filename = 'ファイルパス'
strconcat filename nen
strconcat filename gatu
strconcat filename hi
strconcat filename '_'
strconcat filename nanji
strconcat filename nanfun
strconcat filename nanbyou
strconcat filename '.log'
logopen filename 0 1
getdate W_DATE
gettime W_TIME
strcopy W_DATE 1 4 nen
strcopy W_DATE 6 2 gatu
strcopy W_DATE 9 2 hi
strcopy W_TIME 1 2 nanji
strcopy W_TIME 4 2 nanfun
strcopy W_TIME 7 2 nanbyou
filename = 'ファイルパス'
strconcat filename nen
strconcat filename gatu
strconcat filename hi
strconcat filename '_'
strconcat filename nanji
strconcat filename nanfun
strconcat filename nanbyou
strconcat filename '.log'
logopen filename 0 1
2011年5月17日火曜日
Excel VBA バックアップ作成方法
システムタイムスタンプをファイル名に付けてバックアップ
backUpName = Replace(ThisWorkbook.FullName, _
".xls", _
"_" & Format(Now, "yyyymmddhhmmss") & ".xls")
ActiveWorkbook.SaveCopyAs backUpName
backUpName = Replace(ThisWorkbook.FullName, _
".xls", _
"_" & Format(Now, "yyyymmddhhmmss") & ".xls")
ActiveWorkbook.SaveCopyAs backUpName
2011年5月16日月曜日
teratermマクロ 自動ログイン編
最善の方法じゃないと思うけど。
マクロにユーザIDとパスワード直書きだからなぁ…。
; ユーザID
username = 'XXXXXX'
; パスワード
password ='******'
; サーバのIP
hostname = 999.999.999.999'
; パラメータ設定
msg = hostname
strconcat msg ':22 /ssh /2 /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg password
; ログイン
connect msg
マクロにユーザIDとパスワード直書きだからなぁ…。
; ユーザID
username = 'XXXXXX'
; パスワード
password ='******'
; サーバのIP
hostname = 999.999.999.999'
; パラメータ設定
msg = hostname
strconcat msg ':22 /ssh /2 /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg password
; ログイン
connect msg
2011年5月15日日曜日
Windows cmdでファイル作成
たまーにcmdでファイルを作成したいときがある。
そんなときに使います。
copy con test.txt[enter]
出力したい内容を入力。[enter]
改行も可能。
[crtl]+[z][enter]
※[]はキー
2011年5月14日土曜日
Excel VBA A1セルの値取得
アクティブセルの値を取得
ActiveCell.Value
セルの値を取得
ActiveSheet.Range("A1").Value
ActiveSheet.Cells(1,1).Value
アクティブセルの表示値を取得
ActiveCell.Text
セルの表示値を取得
ActiveSheet.Range ("B1").Text
ActiveSheet.Cells(1,2).Text
ActiveCell.Value
セルの値を取得
ActiveSheet.Range("A1").Value
ActiveSheet.Cells(1,1).Value
アクティブセルの表示値を取得
ActiveCell.Text
セルの表示値を取得
ActiveSheet.Range ("B1").Text
ActiveSheet.Cells(1,2).Text
2011年5月13日金曜日
Excel VBA 気になったこと
ThisWorkbook と ActiveWorkbook の違い
ThisWorkbookはマクロ(処理)を記述したブック
AcitveWorkbookは現在アクティブになっているブック
ThisWorkbookはマクロ(処理)を記述したブック
AcitveWorkbookは現在アクティブになっているブック
状況によって、使い分けが必要なのか。
2011年5月12日木曜日
Excel シート名の変更
シート名を指定して変更する場合
ThisWorkbook.Sheets("Sheet1").Name = "変更"
シート番号を指定して変更する場合
ThisWorkbook.Sheets(1).Name = "変更"
2011年5月11日水曜日
JAVA JARの中身確認
Jarに含まれている内容を確認したかったのでちょっと調べてみた。
以外に簡単にできるらいしい。
Jarに含まれているパッケージとクラスの確認
jar tf test.jar
フォルダ内のJarを一度に確認
For /F %%A in (dir /b *.jar) DO jar tf %%A
以外に簡単にできるらいしい。
Jarに含まれているパッケージとクラスの確認
jar tf test.jar
フォルダ内のJarを一度に確認
For /F %%A in (dir /b *.jar) DO jar tf %%A
2011年5月10日火曜日
2011年5月9日月曜日
登録:
投稿 (Atom)