2011年7月2日土曜日

Excel シートの存在チェック2

ワークブックにシートが存在するかチェックする関数

パラメータは、ワークブックのオブジェクトとシート名
パラメータで渡したワークブックに、パラメータで渡したシート名が存在する場合に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年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

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

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>
レイアウトについても、前回までに説明したので省略します。


<?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>
レイアウトについては、前回説明したので省略します。


明日以降に、ログファイルのローテーションについて書きます。

<?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は、改行コードを出力


一昨日のクラスを実行して出力されるログは、下記のようになる。


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>
については、また明日にでも書きます。


<?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の中身の解説も今回は省略します。
<?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

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

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) の部分がファイルの存在チェックをしている処理です。
簡単でした。


2011年6月8日水曜日

JAVA 固定長ファイル改行コード挿入処理

固定長のファイルに改行コードを挿入するクラスです。
使用方法
第一引数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 の場合、ブックを移動しません(アクティブ化されているブックのままにします)。
省略した場合、ブックを送信するかどうかを確認するダイアログ ボックスが表示されます。

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)


ダイアログを表示せずに閉じることに成功!!!

他の引数もあるみたいなので、それはまた明日ってことで。

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


で開いて閉じることに成功!!!

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
パスワードで保護されたブックを開くために必要なパスワードを指定する。
パスワードが必要なブックを開く際に省略すると、パスワード入力用のダイアログボックスを表示する。
省略可能

WriteResPassword
書き込みを保護されたブックを開くために必要なパスワードを指定する。
パスワードが必要なブックを開く際に省略すると、パスワード入力用のダイアログボックスを表示する。
省略可能

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になる。
省略可能

2011年6月3日金曜日

Excel VBA ブックを開く方法

Excelのマクロを使っていると、他のファイル(ブック)を
開いて、情報(データ)などを参照したいことがよくあるので
調べてみた。

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

2011年6月1日水曜日

Excel VBA ファイルを開いたときにマクロを実行する

ファイルを開いた時点で処理を行いたい場合は、
Visual Basic Editorを開き、プロジェクトエクスプローラー(画面左側)の
ThisWorkbookをダブルクリックする。

コードエディター(画面右側)に下記の内容を記述する。

Private Sub Workbook_Open()
End Sub

例えばファイルを開いた際に1シート目のシート名を変更したい場合は、

Private Sub Workbook_Open()
    ThisWorkbook.Sheets(1).Name = "変更後シート名"
End Sub


2011年5月30日月曜日

Excel VBA マクロ実行時の画面のチラツキをなくす方法

マクロを実行している際に、画面がチラチラして
気になるので制御できないか調べてみた。

マクロの 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

2011年5月28日土曜日

Excel VBA 最終行の取得方法

最終行の番号を取得する方法
ActiveSheet.Cells(ActiveSheet.Cells.Rows.Count, 1).End(xlUp).Row

2011年5月27日金曜日

JAVA ファイル分割処理

ファイルを指定した行数で分割するクラスです。
大きなサイズのファイルとか、テキストエディターで
開けなかったりする場合に、使用すると便利です。

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) {
}
を実装して使ってみてください。


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) {
}
を実装して使ってみてください。


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

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

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

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

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

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

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

2011年5月17日火曜日

Excel VBA バックアップ作成方法

システムタイムスタンプをファイル名に付けてバックアップ

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

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



2011年5月13日金曜日

Excel VBA 気になったこと

ThisWorkbook と ActiveWorkbook の違い

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

2011年5月9日月曜日