気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

C# 関数を使用する方法

ソースの先頭行にusing ~と記述する。

記述方法

Streamクラスを用いて、サーバーからファイルを読み出す場合

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Net;
using System.IO; // ← ここに記述

namespace CardReader
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient wc = new WebClient();

            using (Stream st = wc.OpenRead("http://study-csharp.blogspot.jp/"))
            {
                using (StreamReader sr = new StreamReader(st, Encoding.UTF8))
                {
                    string html = sr.ReadToEnd();
                    Console.Write(html);
                }
            }
        }
    }
}

usingとは

「using System.IO;」におけるSystem.IOは名前空間(namespase)を指します。この名前空間以下に定義されている関数にパスを通しますという意味。 JAVAでいうimport文。

Streamクラスを使用したい場合は、「System.IO」以下に定義されているクラスのため、using System.IOと記述します。 using System.IO.Streamと記述してはいけません。

JavacSript Dateオブジェクトから年月日時分秒、曜日を取得する

Dateオブジェクトから年月日時分秒を取得するメソッドを以下に列挙する。

var dt = new Date();

//年
var year = dt.getFullYear();

//月
//1月が0、12月が11。そのため+1をする。
var month = dt.getMonth()+1;

//日
var date = dt.getDate();

//曜日
//日曜が0、土曜日が6。配列を使い曜日に変換する。
dateT = ["日","月","火","水","木","金","土"];
var day = dateT[dt.getDay()];

//時
var hours = dt.getHours();

//分
var minutes = dt.getMinutes();

//秒
var seconds = dt.getSeconds();

参考URL

【JavaScript】日付処理 - Qiita

JavaScript 日、月、および年の加算と除算

日付の加算、減算でも必要に応じて月、年の値も変更される。

日付の減算で年が変更される場合

var myDate = new Date("1/1/1990")
myDate.setDate(myDate.getDate() - 1);   // 1989年1月1日
document.write(myDate);

// Output: Sun Dec 31 00:00:00 PST 1989

日付の減算で月が変更される場合

var myDate = new Date("1/1/1990")
myDate.setMonth(myDate.getMonth() + 1); // 1990年2月1日
myDate.setDate(myDate.getDate() - 1);   // 1990年1月31日
document.write(myDate);

// Output: Wed Jan 31 00:00:00 PST 1990

参考URL

日付と時刻の計算 (JavaScript)

Java 実装で使える日付型の書き方(Date,Timestamp,Calendar)

システム日付のDate型を文字列に変換

SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date_String = ft.format(new Date());

日付の比較

compareToを使わないDate型の比較

Date型のcompareTo()の比較もあるが、戻り値が-1,0,1と直感的でないため、log型に変換 してから、比較を行う。

if (date1.getTime() > date2.getTime()) {
  return "date1はdate2より未来日"
}

Calendarクラスを使った比較

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.set(Calendar.YEAR, 2015);
cal2.set(Calendar.YEAR, 2010);
System.out.println(cal1.before(cal2)); // false
System.out.println(cal1.equlas(cal2)); // false
System.out.println(cal1.after(cal2)); // true

Timestamp型の比較

ミリ秒を無視して良い場合、限定ですが。Date型に代入して、比較する。Timestamp型はDate型の継承クラスなので代入可能

Date date = new Timestamp();
// あとはDate型の時と同じ要領で比較

別々文字列の年月日、時間の文字列を結合して、Date型に変換する

// +演算子で結合すると新たなオブジェクトが生成されてしまうので、StringBuilderを使用。
StringBuilder sb = new StringBuilder();
sb.append("2016/04/01");
sb.append(" 12:00:00");
str_date = sb.toString();

SimpleDateFormat ft = SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = ft.parse(str_date);

参考URL

直感的で一目で分かる日付の大小比較 - 潜伏バグからのロングフリーズ
日付を比較する | Javaコード入門
java で日付の変換。文字型日付型の変換 - それマグで!

Mac標準機能でパスワード付きZipファイルを作成する

ターミナルを使ってパスワード付きのzip圧縮ファイルを作成します。

対象ディレクトリのある場所へ移動

ターミナルを開いて、圧縮したファイルの入ったディレクトリのある場所へ移動
今回は下記のtextDirを圧縮します。

% ls -l textDir                                                                                                                                                           [7:19:58]
total 0
-rw-r--r--  1 user  staff  0 Jun 26 07:17 a.txt
-rw-r--r--  1 user  staff  0 Jun 26 07:17 b.txt

パスワード付きのzip圧縮ファイルを作成

2回、お好きなパスワードを入力

% zip -e -r textDir.zip textDir                                                                                                                                           [7:18:38]
Enter password: 
Verify password: 
  adding: textDir/ (stored 0%)
  adding: textDir/a.txt (stored 0%)
  adding: textDir/b.txt (stored 0%)

以下の通り、同じパスにzipファイルが作成される

% ls -l textDir.zip                                                                                                                                                       [7:20:20]
-rw-r--r--  1 user  staff  530 Jun 26 07:19 textDir.zip

zipファイルの解凍

unzipコマンドを打って、パスワードを入れて解凍。

% unzip textDir.zip                                                                                                                                                       [7:31:14]
Archive:  textDir.zip
   creating: textDir/
[textDir.zip] textDir/a.txt password: 
 extracting: textDir/a.txt           
 extracting: textDir/b.txt

参考URL

特別なソフトなし!Macでパスワードつきでzip圧縮する方法 | DigitalFan [デジタルファン]

Oracle,MySQL,Postgresの日付型→文字列型変換(YYYY/MM/DD)

Oracle

TO_DATE(TO_CHAR(SYSDATE), 'YY-MM-DD')

MySQL

DATE_FORMAT( SYSDATE() , '%Y-%m-%d')

Postgres

TO_DATE('20060830', 'YYYYMMDD')

Excelのちょっと面倒な作業を楽にするVBAマクロ

作業を楽にするマクロ一覧

以下のリンクで各マクロへジャンプできます。

下記サイトを参考にして、ショートカットを割り当てると便利に使えます。ご使用ください。
マクロにショートカットキーを割り当てる−マクロダイアログ:エクセルマクロ・Excel VBAの使い方

選択シートコピー

Sub 選択シートコピー()
'
' 選択シートコピー Macro
'
'
    ActiveSheet.Copy After:=Sheets(ActiveWorkbook.Worksheets.Count)
    Range("A1").Select
End Sub

アクティブブックの全シートのカーソルを左上移動

Excelを開いたときにカーソルがバラバラで参照しづらい時に使います。全シートのカーソルを左上に移動して、ブックを保存します。

Sub カーソル左上移動()
'
' カーソル左上移動 Macro
'

    Dim WS_Count As Integer
    Dim i As Integer
    
    ' Set WS_Count equal to the number of worksheets in the active
    ' workbook.
    WS_Count = ActiveWorkbook.Worksheets.Count
    
    ' Begin the loop.
    For i = 1 To WS_Count
        Worksheets(i).Select
        Cells(8, 1).Select '分割下領域もカーソルを左上へ移動
        Cells(1, 1).Select
    Next i
    
    Worksheets(1).Select
    ActiveWorkbook.Save
    
End Sub

選択範囲のセル範囲全体に罫線

Sub セル範囲全体に罫線()
'
' セル範囲全体に罫線 Macro
'
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With


End Sub

選択範囲のセル範囲全体に罫線解除

Sub セル範囲全体に罫線解除()
'
' セル範囲全体に罫線 Macro
'
    With Selection.Borders
        .LineStyle = xlNone
    End With


End Sub

コピーしたセルの値のみを貼り付ける

Sub 値貼り付け()
'
' 値貼り付け Macro
'
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

オブジェクト全選択

吹き出しとかコメントとか全てのオブジェクトを選択する。

Sub オブジェクト全選択()
'
' オブジェクト全選択 Macro
'
    ActiveSheet.DrawingObjects.Select

End Sub

選択しているオブジェクトを最背面にする

Sub 最背面()
'
' 最背面 Macro
'
    Selection.ShapeRange.ZOrder msoSendToBack
End Sub

VBAの修正差分を確認するためにモジュールをテキストに書き出す

Sub Module書出()
  ' 使用用途:VBAの修正差分確認用
  
  ' VBA モジュールの書き出し
  Dim Project, objxl As Object
  Dim DirName As String
  Const Path As String = "C:\tmp\"

  'Topディレクトリ作成
  If Dir(Path, vbDirectory) = "" Then
    MkDir Path
  End If
  
  For Each objxl In Application.Workbooks
    If objxl.Name = "PERSONAL.XLSB" Or objxl.Name = "B" Then
      GoTo Continue
    End If
      
    DirName = Path & Left(objxl.Name, Len(objxl.Name) - 4) & "\"
    MkDir DirName
    For Each Project In objxl.VBProject.VBComponents
      Project.Export DirName & Project.Name & ".bas"
    Next
Continue:
  Next
End Sub

カーソル左上移動

Sub カーソル左上移動()
'
' カーソル左上移動 Macro
' 全シートのカーソル左上移動
'
' Keyboard Shortcut: Ctrl+Shift+R
'

    Dim WS_Count As Integer
    Dim i As Integer
    
    ' Set WS_Count equal to the number of worksheets in the active
    ' workbook.
    WS_Count = ActiveWorkbook.Worksheets.Count
    
    ' Begin the loop.
    For i = 1 To WS_Count
        Worksheets(i).Select
        Cells(8, 1).Select '分割下領域もカーソルを左上へ移動
        Cells(1, 1).Select
    Next i
    
    Worksheets(1).Select
    ActiveWorkbook.Save
    
End Sub

選択シート複数コピー_連番シート名

Sub 選択シート複数コピー_連番シート名()
Prefix = "TCP"
CopySheetNum = 18
    
    For i = 1 To CopySheetNum
        ActiveSheet.Copy After:=Sheets(ActiveWorkbook.Worksheets.Count)
        Range("A1").Select
        ActiveSheet.Name = Prefix & i
    Next i
    
End Sub

シート内情報全クリア

Sub シート内情報全クリア()
'
' シート内情報全クリア Macro
' 文字列、表の枠組み、色づけ、フォント(11ptにする)を全クリアする
'
' Keyboard Shortcut: Ctrl+Shift+N
'
    Cells.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .TintAndShade = 0
    End With
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    Selection.ClearContents
    Range("A1").Select
End Sub

空行の挿入

Sub 空行の挿入()
'
' 空行の挿入 Macro
' カーソルがある行に空行の挿入
'
' Keyboard Shortcut: Ctrl+i
'
    Dim rowNum As Long
    Dim address As String
    
    ' 選択位置を取得
    address = Selection.address
    ' 行番号を取得
    rowNum = Selection.Row
    
    Rows(rowNum & ":" & rowNum).Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    
    Range(address).Select

End Sub

行削除

Sub 行削除()
'
' 行削除 Macro
' カーソルがある行を削除
'
' Keyboard Shortcut: Ctrl+Shift+d
'
    Dim rowNum As Long
    Dim address As String
    
    ' 選択位置を取得
    address = Selection.address
    ' 行番号を取得
    rowNum = Selection.Row
    
    Rows(rowNum & ":" & rowNum).Select
    Selection.Delete Shift:=xlUp
    
    Range(address).Select

End Sub

URLリンク化

Sub URLリンク化()
'
' URLリンク化 Macro
' URL文字列セルをリンク化して、下の行のセルに移動する
'
' Keyboard Shortcut: Ctrl+Shift+L
'
  Dim row_num As Long
  Dim col_num As Long
  Dim val As String
  
  row_num = ActiveCell.Row
  col_num = ActiveCell.Column
  val = ActiveCell.Value
    
  ActiveSheet.Hyperlinks.Add Anchor:=Cells(row_num, col_num), address:=val
  
  Cells(row_num + 1, col_num).Select
    
End Sub

ハイパーリンクを開く

Sub ハイパーリンクを開く()
'
' ハイパーリンクを開く Macro
' セル内ハイパーリンクを開く
'
' Keyboard Shortcut: Ctrl+Shift+H
'
    Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
End Sub