2011年9月28日水曜日

ASP.NET ページング機能の有効化

まずは、GridViewのプロパティー上で[AllowPaging][TRUE]に変更
これは絶対条件です。

DataSourceを使用している場合は以上でおしまいですが、
DataSetを作成し、GridViewにバインドさせている場合はさらにコーティングが必要です。

まずは、上記の[AllowPaging][TRUE]に変更
次にDataSetを作成

Private Sub DataSet
Dim ds As DataSet
Dim sql As String
Dim cnn As New OracleConnection

Dim cmd As New OracleCommand
Dim dad As New OracleDataAdapter

sql = "SELECT * FROM TABLE名"


cmd.Connection = cnn
cmd.CommandText = sql
dad.SelectCommand = cmd

ds.Clear()
dad.Fill(ds)

'GridViewにデータをセットします。
GridView1.DataSource = ds
GridView1.DataBind()

  'データセットを後でも使うので  'Sessionオブジェクトに格納。  
    Session("DataSet") = ds

ds.Dispose()
cnn.Close()
cnn.Dispose()
End Sub

次にGridViewの「PageIndexChanging」イベントで、処理を行う。

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging

        '第二引数から、選択されたページindexを取得。
        'GridViewのページIndexに設定。   
        GridView1.PageIndex = e.NewPageIndex

        'GridViewに再度データをバインドさせる。
        '先ほどのデータセットを格納。
        GridView1.DataSource = Session("DataSet")
        GridView1.DataBind()

    End Sub

以上でページ機能が使用できる

2011年9月22日木曜日

Excel VBAプログラミング一覧

※参考度は個人的は評価です。(助かった度かも?)


Excelシート上に配置したコントロールを使用する方法
参考度:★★☆☆☆

VBAでダブルクォーテーションを扱う方法
参考度:★★☆☆☆

VBAでシートを追加する方法
参考度:★★☆☆☆

VBAで指定のシートを削除する方法
参考度:★★☆☆☆

VBAで対象のシートが存在するかチェックする方法
参考度:★★☆☆☆

VBAでメッセージボックス(MsgBox)を表示させる方法
参考度:★☆☆☆☆

VBAでコメントのサイズを変更する方法
参考度:★★★☆☆

VBAでコメントを記入する方法
参考度:★★★★☆

VBAでスペースを削除する方法
参考度:★☆☆☆☆

VBAで数値を文字列に変換する方法
参考度:★☆☆☆☆

VBAで文字列を数値に変換する方法
参考度:★☆☆☆☆

VBAで大文字/小文字の変換を行う方法
参考度:★★☆☆☆

VBAで指定の文字数を切出す(抽出)する方法
参考度:★☆☆☆☆

VBAで文字数を調べる方法
参考度:★☆☆☆☆

VBAで数式を設定する方法
参考度:★★★☆☆

VBAを使用した文字列の変換 全角、半角等
参考度:★★☆☆☆

VBAで開いているファイルを閉じる方法 ※確認メッセージも出さない
参考度:★★★☆☆

VBAを使用して対象のファイルをアクティブにする方法 シート選択も
参考度:★☆☆☆☆

VBAを使用してEXCELのシート上のデータをすべて削除する方法
参考度:★★☆☆☆

VBAを使用して対象のファイルを開く方法
参考度:★★☆☆☆

VBAを使用したEXCEL描画機能の一旦停止
参考度:★★☆☆☆

マクロを実行しているファイル名の取得
参考度:★★☆☆☆

-------------------------------------------------------------------
EXCEL VBA xls Excel2003

2011年9月18日日曜日

VB6のプログラミング一覧

※参考度は個人的は評価です。(助かった度かも?)

VB6のvsFlexGridで複数選択したセルの色を一括で変える方法
参考度:★★☆☆☆

VB6 と FlexGridでセルを結合(マージ)する方法
参考度:★☆☆☆☆

VB6 と FlexGridでCell(セル)内の文字の配置を設定する方法
参考度:★☆☆☆☆

VB6 と FlexGridで改行表示させる方法
参考度:★☆☆☆☆

VB6 & CrystalReport6で手動で積算合計を作る方法
参考度:★★★★★

VB6でIPアドレスを取得する方法
参考度:★★★★☆

VB6で文字数でなくバイト数で文字操作をする方法
参考度:★★☆☆☆

VB6での改行文字調査
参考度:★★☆☆☆

---------------------------------------------------------------------
その他

VB6での改行コード表示違い。XP , 2000

---------------------------------------------------------------------
Microsoft VB6 CrystalReport FlexGrid

ASP.NETプログラミング一覧

※参考度は個人的は評価です。(助かった度かも?)

ASP.NETで5秒後に画面を閉じる方法
参考度:★★☆☆☆

ASP.NETでデータベース等より取得した時間を元にデジタル時計を表示する方法。
参考度:★★★★★

ASP.NETでカスタムコントロールを作る方法
参考度:★★☆☆☆

ASP.NET TextBoxで数値のみ入力可能なカスタムコントロールの作成方法
参考度:★★★★★

ASP.NETでIPアドレスを取得する方法
参考度:★★★☆☆

ASP.NET GridViewでフッター(Footer)の表示の方法 ※合計あり
参考度:★★★★☆

ASP.NETサーバ・コントロール上のIMEモードを制御する方法
参考度:★★☆☆☆

ASP.NET GridViewで選択した行の値を取得する方法 ButtonField使用
参考度:★★★★★

VB.NET で時間の加算、減算する方法 ASP.NET共通
参考度:★★★☆☆

ASP.NET BoundField列のDataFormatStringが効かない回避策
参考度:★★★☆☆

ASP.NETでログインユーザー名を取得する方法
参考度:★★★☆☆

ASP.NETでデータバインドでのフォーマット指定方法
参考度:★★★☆☆


-----------------------------------------------------------
Visual Basic 2005 ASP.NET IIS

Oracle SQLの関数一覧等

Oracle SQLの関数一覧等
※参考度は個人的は評価です。(助かった度かも?)

Oracle SQLで曜日を取得する方法 和名 or 英名
参考度:★★★★☆

SQL 関数 - 余り、四捨五入、切り捨て、切り上げ、数値フォーマット等
参考度:★★★☆☆

SQLでの改行文字の調査
参考度:★★☆☆☆

-------------------------------------------------------------------
Oracle SQL 関数

VB.NETのプログラミング一覧

VB.NETのプログラミング一覧

※参考度は個人的は評価です。(助かった度かも?)

VB.NET で時間の加算、減算する方法 ASP.NET共通
参考度:★★★☆☆

VB.NETでファイルの更新日を確認(収得)する方法
参考度:★★★☆☆

VB.NETでフォルダが存在するかどうか確認する方法
参考度:★★★☆☆

VB.NETで指定ファイルを移動もしくは別名保存する方法
参考度:★★★☆☆

VB.NETで指定ファイルを削除する方法
参考度:★★☆☆☆

VB.NETで指定のファイルが存在しているかの確認方法
参考度:★★★☆☆

VB.NETでファイルのバージョン情報を取得する
参考度:★★★★★


------------------------------------------------------
Visual Basic 2005 VB.NET

2011年9月17日土曜日

Excelシート上に配置したコントロールを使用する方法

Worksheetオブジェクト.OLEObjects(コントロール).Object.プロパティやメソッド
・コントロール
 操作するコントロールを名前や番号で指定します。なお、番号で指定するときの先頭は1です。
・プロパティやメソッド
 ValueやEnabledなど、コントロールを操作するときのプロパティやメソッドを指定します。

--------------------------------------------------------------------------------
【記述例】「TextBox1」というテキストボックスへ値をセットする
Worksheets("Sheet1").OLEObjects("TextBox1").Object.Value = "テスト"

【記述例2】「ComboBox1」というコンボボックスへアイテムを追加する
Worksheets("Sheet1").OLEObjects("ComboBox1").Object.AddItem "リスト1"


-------------------------------------------------------------------
EXCEL VBA xls Excel2003

AutoCAD-VBA作成方法

AutoCAD2010以降でVBAを使いには別途Autodeskよりダウンロードしてインストールする必要あり。


AutoCADでマクロを作成するには[管理]→[アプリケーション]→[Visual Basic Editer]より作成
※[Alt]+[F11]でもエディタ起動


[新規作成]を選択


エディタが開くので編集していく。
※基本操作は通常のVBAと同様です。

VB6のvsFlexGridで複数選択したセルの色を一括で変える方法

FillStyleの値をデフォルトの flexFillSingle → flexFillRepeat
に変更するだけです。

使用例:
With vsFlexGrid
'複数選択モードにする
.FillStyle = flexFillRepeat
.Select row1, col1, row2, col2
.CellBackColor = &H80FFFF
'単体選択モードに戻す。
.FillStyle = flexFillSingle
End With


---------------------------------------------------------------------
Microsoft VB6 FlexGrid

ASP.NETで5秒後に画面を閉じる方法

JavaScriptを使用して画面を閉じる方法です。
ただし、親画面を閉じる警告メッセージが表示されますので、
自動で終了することはでません。
これはIEの使用ですので回避は出来ないみたいです。


        strScript &= "<script language=javascript>"
        strScript &= "bb = 0;"
        strScript &= "function WindowClose() {"
        strScript &= "if(bb == 5){window.close()};"
        strScript &= "bb = bb + 1;"
        strScript &= "};"
        strScript &= "setInterval(function(){WindowClose()},1000);"
        strScript &= "</script>"
        Response.Write(strScript)

   



ASP.NET VB2005 JavaScript 画面 終了 閉じる

ASP.NETでカスタムコントロールを作る方法

ASP.NETでカスタムコントロールを作成するには、
新規のプロジェクトでWebコントロールライブラリを選択して作成する。
※下記参照


作成が完了したら、プロジェクトを保存し、ビルドを実行しdllを作成する。


dllはプロジェクトの保存先のbin→Releaseフォルダ内にある。
プロジェクト名.dllを任意の場所にコピーする。


ツール→ツールボックスアイテムの選択を選択


先ほど任意の場所に保存したdllを選択する。


ツールボックスに作成したカスタムコントロールが表示されるので、
後はいつもどおり使用できます。
※私はわかりやすいようにタグを作成して一般のコントロールと分けて表示しています。


今回作成したカスタムカスタムコントロールは下記より参照ください。
ASP.NET TextBoxで数値のみ入力可能なカスタムコントロールの作成方法



ASP.NET VB2005 カスタムコントロール

ASP.NETでデータベース等より取得した時間を元にデジタル時計を表示する方法。

ASP.NET で出退勤のシステムを作ることになったので、
画面上にデジタル時計を表示する必要があったので作成しました。
時計のカウントアップにJavaScriptを使用しています。
1秒毎にデータベースの値を取得するとデータベースに負荷が掛かるので、
5分毎にデータベースの値を取得するようにしています。
JavaScriptでデータベースアクセスの方法が分からなかったので、
荒業ですが、ページを再ロードする方法をとっています。
ここの部分は再度考慮の必要があると思います。

※注意が必要なのが、なぜかJavaScriptのデータは月を-1して日付計算をする必要があるみたいです。
詳しくは調べていませんのでデマかも知れません。



    Protected Sub Set_Watch()
        Dim sf As New Shared_Function
        Dim sdatetime As String
        Dim strScript As String = ""
        Dim numyear As String
        Dim numman As String
        Dim numday As String
        Dim numtime As String
        Dim nummin As String
        Dim numscn As String

       

         'データベースより時間を取ってくる YYYY/MM/DD HH24:MI:SS 形式
        sdatetime = sf.Get_Str_Sysdatetime

        'それぞれを年,月,日,時間,分,秒に分ける。
        numyear = Mid(sdatetime, 1, 4)
        numman = Mid(sdatetime, 6, 2)
        numday = Mid(sdatetime, 9, 2)
        numtime = Mid(sdatetime, 12, 2)
        nummin = Mid(sdatetime, 15, 2)
        numscn = Mid(sdatetime, 18, 2)

 

        strScript = ""
        strScript &= "<script language=javascript>"
        strScript &= "numyear = Number(" + numyear + ");"

        'javascriptの仕様で月は-1する
        strScript &= "numman = Number(" + numman + ")-1;"  
        strScript &= "numday = Number(" + numday + ");"
        strScript &= "numtime = Number(" + numtime + ");"
        strScript &= "nummin = Number(" + nummin + ");"
        strScript &= "numscn = Number(" + numscn + ");"
        strScript &= "aa = 0;"

        strScript &= "function Watch() {"

        '5分毎にページを再ロードしデータベースの値を取得
        strScript &= "if(aa == 300000)" & _

                             "{parent.location.href = '../In_Out_Check/Entry.aspx';};"

        '取得した値をDate型に変換
        strScript &= "now = " &  _

                               new Date(numyear,numman,numday,numtime,nummin,numscn );"

        'データベースの値は5分ごとに再取得するので

        'それでは1000ミリ秒ずつセットしなおす。
        strScript &= "now.setTime(now.getTime()+aa);"
        strScript &= "now.getTime();"

        strScript &= "year = now.getYear();"

        'Date変換時にマイナスした分を足す。

        strScript &= "month = now.getMonth()+1;" 

        strScript &= "day = now.getDate();"
        strScript &= "hour = now.getHours();"
        strScript &= "minute = now.getMinutes();"
        strScript &= "second = now.getSeconds();"
        strScript &= "now = new Date();"
        strScript &= "if (year < 1000) { year += 1900 }"
        strScript &= "if (hour < 10) { hour = '0' + hour }"
        strScript &= "if (minute < 10) { minute = '0' + minute }"
        strScript &= "if (second < 10) { second = '0' + second }"

        'ID=watchのテキストに時間を渡す。 aspx上に配置必要
        strScript &= "document.getElementById(""watch"").value = " & _

                              "  hour + ':' + minute + ':' + second;"

        'ID=DataTextのテキストに年月等を渡す。
        strScript &= "document.getElementById(""DateText"").value = " & _

                                " year+'年' + month + '月' + day;"

 

        strScript &= "aa = aa + 1000;"
        strScript &= "};"

        '1000ミリ秒(1秒ごと) watchを動かす。
        strScript &= "window.onload=function(){"
        strScript &= "setInterval(function(){Watch()},1000);"
        strScript &= "};"
        strScript &= "</script>"
        Response.Write(strScript)

    End Sub



ASP.NET VB2005 デジタル時計 JavaScript 表示

 

ASP.NET TextBoxで数値のみ入力可能なカスタムコントロールの作成方法

今回作成したカスタムコントロールは下記の通りです。
テキストボックスを継承して新しいカスタムコントロールを作成しています。
下記ソースはIMEをoffにしてJavaScriptを使用して数値のみの入力としています。

dllも添付していますので、ご自由に使用してください。
本来は、プロパティでIMEの変更等を行いたかったのですが、
うまいこと動かなかったのでIME等の設定は決め打ちで行っています。
ソースも一応貼り付けていますが、そのまま動くかは不明です。
(改行等でブログの仕様で文字等がおかしくなってる場合があります。)

Browsable(False)>を宣言するとプロパティに表示しません。

 


 

Imports System.ComponentModel
Imports System.Web.UI

<DefaultProperty("Text"), ToolboxData("<{0}:TextBox_ImrOff_NumOnly runat=server></{0}:TextBox_ImrOff_NumOnly>")> _

Public Class TextBox_ImrOff_NumOnly
    Inherits System.Web.UI.WebControls.TextBox
    Private _imeMode = "disabled"
    Private _onFocus As String = "javascript:this.value" _
                "=this.value.replace(/,/g,'');this.select();this.style.backgroundColor='#FFFFCC'"
    Private _onBlur As String = "javascript:if(isNaN(this.value)==true){ alert('数値のみ入力可です。');" _
                "this.focus();return};this.value=this.value-0;while(this.value!=(tmpStr=this.value.replace(/^([+-]?\d+)(\d\d\d)/,'$1,$2'))){this.value=tmpStr;};if(this.value=='') this.value='0';" _
            "this.style.backgroundColor='#FFFFFF'"
    Private _onkeyPress As String = "javascript:if(((event.keyCode<48)||(event.keyCode>57))&&(event.keyCode!=45)&&(event.keyCode!=46)){window.event.returnValue=false;}"

    <Browsable(False)> _
    Public Property ImeMode() As String
        Get
            Return _imeMode
        End Get
        Set(ByVal Value As String)
            _imeMode = Value
        End Set
    End Property

 

    'フォーカス取得時のプロパティ設定
    <Browsable(False)> _
    Public Property onFocus() As String
        Get
            Return _onFocus
        End Get
        Set(ByVal Value As String)
            _onFocus = Value
        End Set
    End Property

 

    'フォーカス喪失時のプロパティ設定
    <Browsable(False)> _
    Public Property onBlur() As String
        Get
            Return _onBlur
        End Get
        Set(ByVal Value As String)
            _onBlur = Value
        End Set
    End Property

 

    'キー押下時のプロパティ設定
    <Browsable(False)> _
    Public Property onkeyPress() As String
        Get
            Return _onkeyPress
        End Get
        Set(ByVal Value As String)
            _onkeyPress = Value
        End Set
    End Property

 

    'プロパティ追加
    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        MyBase.OnInit(e)
        MyBase.Style("ime-mode") = _imeMode
        'MyBase.Style("text-align") = _alignList(_align)
    End Sub

 

    Protected Overrides Sub AddAttributesToRender(ByVal writer As System.Web.UI.HtmlTextWriter)
        writer.AddAttribute("onFocus", _onFocus)
        writer.AddAttribute("onBlur", _onBlur)
        writer.AddAttribute("onkeyPress", _onkeyPress)
        MyBase.AddAttributesToRender(writer)
    End Sub
End Class


 


 


ASP.NET VB2005 カスタムコントロール





ASP.NETでIPアドレスを取得する方法 

Request.ServerVariables("REMOTE_ADDR")でIPアドレスを取得可能。
192.168.11.100等が返されます。

ローカルで実行すると'127.0.0.1'が返されます。




Dim ipaddr as String

ipaddr = Request.ServerVariables("REMOTE_ADDR")



ASP.NET VB2005 IPアドレス

ASP.NET GridViewでフッター(Footer)の表示の方法 ※合計あり

フッターを表示するためには、
GridViewのShowFooterをTrueに設定する。
GridViewのRowDataBoundクラスに処理を記述
e.Row.RowType = DataControlRowType.DataRowで各行の値を取得していく。
e.Row.RowType = DataControlRowType.Footer で上記で足し算した値を表示。

以上、フッターに合計値を表示することが可能。



GridViewのプロパティのShowFooter=Trueの設定

Dim Sum_残業時間 As Double = 0

Const Col_残業時間 = 0

Protected Sub GridViewUser一覧_RowDataBound
(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
Handles GridVie wUser一覧.RowDataBound
Dim result_umu As String

'DataBoundのデータを取得し足しこんでいく。
If e.Row.RowType = DataControlRowType.DataRow Then
' UnitPrice および QuantityTotal をそれぞれの累計用変数に加算します。
Sum_残業時間 += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "残業時間"))

'足しこんだ値をフッターに表示する。
ElseIf e.Row.RowType = DataControlRowType.Footer Then
e.Row.Cells(Col_日付).Text = "計:"
' フッターに、累計を表示します。
e.Row.Cells(Col_残業時間).Text = Sum_残業時間.ToString("0.0")

'書式設定
e.Row.Cells(Col_残業時間).HorizontalAlign = HorizontalAlign.Center
'e.Row.Font.Bold = True
End If

End Sub


ASP.NET VB2005 GridView Footer 合計

ASP.NETサーバ・コントロール上のIMEモードを制御する方法

※この設定はIE 5.x以降のみ有効となります。IE7.0でも有効性は確認済み

ここでは、active/disabledという2つのCSSクラスを定義しているが、それぞれのクラスで指定されているのがime-modeプロパティだ。IE 5.x以降のCSSでは、ime-modeプロパティを用いることで、該当するフォーム要素にフォーカスが当たったタイミングで、有効なIMEモードを制御できる。以下に、ime-modeプロパティで指定可能な設定値を一覧表にまとめておく。

値 概要
auto 自動(デフォルト)。モード変更可能
active 日本語入力モード。モード変更可能
inactive 英数字入力モード。モード変更可能
disabled 英数字入力モード。モード変更不可
 
ime-modeプロパティで指定可能な値

 次の画面は、IMEモードを自動的に切り替えるサンプル・プログラムを実際に実行したところである。

 

Sample 青字の部分が変更点になる。


<%@ Page ContentType="text/html" %>
<html>
<head>
<title>IMEサンプル</title>
<style type="text/css">
<!--
.active {ime-mode: active;}
.disabled {ime-mode: disabled;}
-->
</style>
</head>
<body>
<form runat="Server">
<table border="0">
<tr>
  <th align="right">氏名:</th>
  <td><asp:TextBox id="name" runat="Server" size="20" CssClass="active" /></td>
</tr><tr>
  <th align="right">E-Mail:</th>
  <td><asp:TextBox id="email" runat="Server" size="30" CssClass="disabled" /></td>
</tr><tr>
  <th align="right">住所:</th>
  <td><asp:TextBox id="address" runat="Server" size="50" CssClass="active" /></td>
</tr><tr>
  <td rowspan="2"><asp:Button id="sbm" runat="Server" Text="送信" /></td>
</tr>
</table>
</form>
</body>
</html>

 


ASP.NET VB2005 IME 制御

 

ASP.NET GridViewで選択した行の値を取得する方法 ButtonField使用

1. GridView内にButtonField列を追加する

2.ButtonField列のプロパティのCommandNameにSelectと入力
 ※これを設定しないとSelectedIndexChangedが発生しない?たぶん…

3.GridView の プロパティー DataKeyNames を主キーに設定する。
 ※これを設定している列項目の値を取得してくる。
   設定をしないとエラーが発生する。

4. SelectedIndexChanged イベントを取得して処理するイベントハンドらを作成する。
 (RowCommand イベントで×)

5. そのイベントハンドラの中で GridView.SelectedValue プロパティを使用して主キー値を取得する。
 ※複数指定したい場合は
 GridView一覧.SelectedDataKey.Item(index).ToString
 GridView一覧.SelectedDataKey.Item(項目名).ToString を指定する。

----------------------------------------------------------------------
Protected Sub GridView一覧_SelectedIndexChanged(ByVal sender As Object, ByVal e As Syst                   em.EventArgs) Handles GridView一覧.SelectedIndexChanged

Dim ucode As String

   '主キーがひとつの場合
ucode = GridView一覧.SelectedValue.ToString

   '主キーが複数ある場合
ucode = GridView一覧.SelectedDataKey.Item("社員コード").ToString
uname = GridView一覧.SelectedDataKey.Item("社員").ToString

Session("master_usercode") = ucode
End Sub
--------------------------------------------------------------------------

ASP.NET VB2005 GridView

VB.NET で時間の加算、減算する方法 ASP.NET共通

' 日付と時刻を格納するための変数を宣言する
Dim dtime As DateTime

dtime = DateTime.Parse("2009/02/07 22:30")

' 8 時間加算する
dtime = dtBirth.AddHours(8)   '2009/02/08 03:30

' 4 時間減算する
dtime = dtBirth.AddHours(-4) '2009/02/07 18:30

日付を加算、減算する場合は AddDayを使用

------------------------------------------------------------
VB.NET VB2005 ASP.NET 時間 加算 減算

Oracle SQLで曜日を取得する方法 和名 or 英名

TO_CHAR 関数で曜日を取得することが可能(和名、または、英名)

曜日を取得するには 書式指定に 'DAY' を指定する。
日本の曜日はすべて同じ長さなので関係ないが、
英語の曜日は一番長い 'Wednesday' の長さにあわせ空白が付けられている。

TO_CHAR( SYSDATE, 'Day', 'NLS_DATE_LANGUAGE = ENGLISH') ⇒ 'Sunday '
TO_CHAR( SYSDATE, 'Day') ⇒ '日曜日'

-----------------------------------------------------------------
Oracle SQL DAY 曜日

ASP.NET BoundField列のDataFormatStringが効かない回避策

ASP.NET2.0においてGridView等でデータバインドで値を取得した場合において、
DataFormatStringに書式を指定しても有効になりません。
有効にするにはHtmlEncode="false"
を指定する必要があります。ASP.NET2.0の仕様だそうです。

----------------------------------------------------------------------

asp:BoundField DataField="計画時間" DataFormatString="{0:f1}" HtmlEncode="false"

----------------------------------------------------------------------

ASP.NET2.0 VB2005 GridView DataFormatString HtmlEncode

ASP.NETでデータバインドでのフォーマット指定方法 ※数値

データバインドで数値表示をする場合、
フォーマット指定をしなければ、小数点が存在する場は
小数点以下2桁まで勝手に表示する。
たとえば
1 → 1
1.2 → 1.20
その為、データバインドで値を取得、表示する場合は別途フォーマット指定が必要

---------------------------------------------------------------
DataBinder.Eval(Container, "DataItem.金額","{0:f1}")

"{0:f1}"の場合は小数点第1位まで表示する。
---------------------------------------------------------------

VB2005 ASP.NET DataBind データバインド 数値 フォーマット

ASP.NETでログインユーザー名を取得する方法

User.Identity.Name で取得できる。

取得形式は
ドメイン名\ユーザー名。

ただし、下記の設定が必要
IISの設定を匿名アクセスを禁止(チェックを外す)
統合Windows認証にチェック

----------------------------------------------------------------------
Visual Basic 2005 ASP.NET IIS

VB.NETでファイルの更新日を確認(収得)する方法

Dim astr as String
Dim Ctime as String

Ctime = System.IO.File.GetCreationTime(astr)

--------------------------------------------------
Visual Basic 2005 VB.NET

VB.NETでフォルダが存在するかどうか確認する方法

Dim strDirPath as String

strDirPath="c:\test"

 'フォルダの存在を確認する
 If System.IO.Directory.Exists(strDirPath) = True Then
  MessageBox.Show(strDir & "は存在します" ,"通知")
 Else
  MessageBox.SHow(strDir & "は存在しません" ,"通知")
 End If

------------------------------------------------------
Visual Basic 2005 VB.NET

VB.NETで指定ファイルを移動もしくは別名保存する方法

' ファイルを移動
System.IO.File.Move("C:\aaa.txt", "C:\ABC\aaa.txt")

' 同じディレクトリに別名で移動すれば、名前を変更したことになる
System.IO.File.Move("C:\ABC\aaa.txt", "C:\ABC\bbb.txt")

------------------------------------------------------
Visual Basic 2005 VB.NET

VB.NETで指定ファイルを削除する方法

' ファイルを削除する
System.IO.File.Delete("C:\Hoge.txt")


------------------------------------------------------
Visual Basic 2005 VB.NET

VB.NETで指定のファイルが存在しているかの確認方法

' ファイルが存在しているかどうか確認する

If System.IO.File.Exists("C:\aaa.txt") Then
MsgBox("ファイルは存在します")
Else
MsgBox("ファイルは存在しません")
End If


------------------------------------------------------
Visual Basic 2005 VB.NET

VB.NETでファイルのバージョン情報を取得する

' 指定したファイルのバージョン情報を取得する

Dim VerInfo As System.Diagnostics.FileVersionInfo
Dim stNewLine As String = System.Environment.NewLine
Dim stPrompt As String = String.Empty
Dim astr as string

astr = "C:\WINDOWS\Notepad.exe"
VerInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(astr)


' ファイルまでのパス
stPrompt &= "ファイル名 : " & hVerInfo.FileName & stNewLine

' ファイルの説明 (AssemblyTitle)
stPrompt &= "ファイルの説明 : " & hVerInfo.FileDescription & stNewLine

' コメント (AssemblyDescription)
stPrompt &= "コメント : " & hVerInfo.Comments & stNewLine

' 会社名 (AssemblyCompany)
stPrompt &= "会社名 : " & hVerInfo.CompanyName & stNewLine

' 製品名 (AssemblyProduct)
stPrompt &= "製品名 : " & hVerInfo.ProductName & stNewLine

' 著作権 (AssemblyCopyright)
stPrompt &= "著作権 : " & hVerInfo.LegalCopyright & stNewLine

' 商標 (AssemblyTrademark)
stPrompt &= "商標 : " & hVerInfo.LegalTrademarks & stNewLine

正式ファイル名 (アセンブリ名)
stPrompt &= "正式ファイル名 : " & hVerInfo.OriginalFilename & stNewLine

' 内部名
stPrompt &= "内部名 : " & hVerInfo.InternalName & stNewLine

' 言語
stPrompt &= "言語 : " & hVerInfo.Language & stNewLine

' ファイルのバージョン情報
stPrompt &= "ファイルのバージョン番号 : " & hVerInfo.FileVersion & stNewLine
stPrompt &= "ファイルのメジャー番号 : " & hVerInfo.FileMajorPart & stNewLine
stPrompt &= "ファイルのマイナ番号 : " & hVerInfo.FileMinorPart & stNewLine
stPrompt &= "ファイルのビルド番号 : " & hVerInfo.FileBuildPart & stNewLine
stPrompt &= "ファイルのプライベート番号 : " & hVerInfo.FilePrivatePart & stNewLine

' 製品のバージョン情報
stPrompt &= "製品のバージョン番号 : " & hVerInfo.ProductVersion & stNewLine
stPrompt &= "製品のメジャー番号 : " & hVerInfo.ProductMajorPart & stNewLine
stPrompt &= "製品のマイナ番号 : " & hVerInfo.ProductMinorPart & stNewLine
stPrompt &= "製品のビルド番号 : " & hVerInfo.ProductBuildPart & stNewLine
stPrompt &= "製品のプライベート番号 : " & hVerInfo.ProductPrivatePart & stNewLine

' ビルド情報
stPrompt &= "プライベート ビルド情報 : " & hVerInfo.PrivateBuild & stNewLine
stPrompt &= "特殊ビルド情報 : " & hVerInfo.SpecialBuild & stNewLine

' その他の情報
stPrompt &= "デバッグ情報を格納するか : " & hVerInfo.IsDebug & stNewLine
stPrompt &= "開発バージョン (プレリリース) か : " & hVerInfo.IsPreRelease & stNewLine
stPrompt &= "ファイルが変更されているか : " & hVerInfo.IsPatched & stNewLine
stPrompt &= "標準リリース プロシージャで生成されたか : " & hVerInfo.IsPrivateBuild & stNewLine
stPrompt &= "特殊ビルドかどうか : " & hVerInfo.IsSpecialBuild & stNewLine

' 取得したすべてのバージョン情報を表示する
MessageBox.Show(stPrompt)

------------------------------------------------------
Visual Basic 2005 VB.NET

VB6 と FlexGridでセルを結合する方法(マージ)

ヘルプより

機  能 内容の同じセル間のグリッド線を削除し、複数のセルを1つのセルにまとめます(マージします)。

書  式 [form.]FlexGrid.MergeCells[= Style%]

0 flexMergeNever        マージしない(デフォルト)
1 flexMergeFree         セル単位
2 flexMergeRestrictRows    行方向
3 flexMergeRestrictColumns  列方向
4 flexMergeRestrictAll      行と列
5 flexMergeFixedOnly      固定セルのみ
6 flexMergeSpill      隣へはみだす


MergeCellsプロパティを使って内容の同じセルを1つにまとめると、表が非常に見やすくなります。
セルをまとめる機能(マージ機能)を有効にするには、以下の設定が必要です。

1,MergeCellsプロパティを0以外の値に設定する。
2,マージしたい行や列のMergeRowプロパティやMergeColプロパティをTrueに設定する。
 (「6-隣へはみだす」を使用しているときには、最後の操作は必要ありません)

これで操作は完了です。指定した行や列のセルの内容が同じであれば、それらのセルは1つにまとめられ、セルの中身が変更された場合には、新しい内容に従ってセルが新たにまとめられます。

「0-マージしない」以外の値に設定すると、コントロール上の選択範囲はHighLightプロパティの設定値に関係なく常に非表示となります。これはマージしたセルの一部が選択範囲内に、残りは選択範囲外に分断されてしまう可能性があるためです。

設定値「Free(1)」と「Restricted(2、3、4のいずれか)」は、同一内容を持つセルをすべてマージするか(Free)、隣接するセルのみをマージするか(Restricted)という点で異なります。

「5-固定セルのみ」は、列(行)のタイトルだけをマージし、その列(行)のデータはマージしたくないときに便利です。

「6-隣へはみだす」は他の設定と少し異なっています。というのは、この設定だけはMergeColプロパティとMergeRowプロパティの設定を必要とせず、他と同じやり方ではセルをマージできないからです。その代わり、隣のセルが空である限り、長いエントリも隣のセルにはみ出して表示できます。この機能は、アウトラインを作成するときに非常に有効です。まず、グループのタイトルを表示できるだけの狭い列を作成しておき、必要に応じて右側のセルにはみ出して表示するように設定できるからです。

------------------------------------------------------
VB6 FlexGrid

VB6 と FlexGridでCell(セル)内の文字の配置を設定する方法

FlexGridで文字の配置を設定するには下記の通りでさる。

ヘルプより
機  能 カレントセルまたは指定範囲の
     セルのどの位置にデータを表示するかを設定します。

書  式 FlexGrid.CellAlignment[= Setting%]

設 定 値 整数型(列挙型)

      0 flexAlignLeftTop   左上
      1 flexAlignLeftCenter  左中央
      2 flexAlignLeftBottom  左下
      3 flexAlignCenterTop   中央上
      4 flexAlignCenterCenter 中央中央
      5 flexAlignCenterBottom 中央下
      6 flexAlignRightTop   右上
      7 flexAlignRightCenter 右中央
      8 flexAlignRightBottom 右下
      9 flexAlignGeneral    標準(デフォルト:
                    文字列の場合は左中央、数値の場合は右中央)

------------------------------------------------------
VB6 FlexGrid

VB6 と FlexGridで改行表示させる方法

VB6 と FlexGridで改行表示させる方法

FlexGridのプロパティの
WordWrapをTrueにするとセルの長さに合わせて改行される
※半角続きの場所では改行されないので注意が必要
セルのCol高さを大きくしないと改行された値は表示されない。

バージョンは下記の通り
 VS-FLEXGRID Pro Ver.6.0

------------------------------------------------------
VB6 FlexGrid

VB6 & CrystalReport6で手動で積算合計を作る方法

VB6.0およびCrystalReport6で
「グループごとにまとめて表示」にチェックを入れ、
積算合計フィールドを使用して合計表示を行うと
集計値がおかしくなる不具合がある。

その為、積算合計フィールドを使用する場合は
「グループごとにまとめて表示」するのをあきれめる必要があるが、
どうしても、見栄え等でグループの途中で改行が入るのが嫌な場合は、
別途、手動で積算合計をする必要がある。

無論、.NETおよび最新のCrystalReport(CR)に移行すれば問題無いと思われるが、
.NETに移行するにはマンパワーが足りないので現状は棚上状態なので…。

本題に戻して、
手動で積算合計を使用する場合は、
[レポートヘッダー]に変数宣言と初期化の処理を行う。

グループ毎の小計を出力する場合は
 [グループヘッダー]に小計の初期化の処理を入れる。
 (小計が必要ない場合は省略可能)

[詳細]で小計及び総計の演算処理を行う。

[グループフッター]に小計表示の数式を配置
 (小計が必要無い場合は省略可能)

[レポートフッター]に総計表示の数式を配置

※①~⑤はすべて式フィールドで作成し各場所に配置する。
※[ページヘッダー]および[ページフッター]は使用しない。


使用例は下記の通りです。
----------------------------------------------------------------------------

①[レポートヘッダー]
 総計変数宣言 ←式の名前

 ↓式の内容はここから -----------------------------------------------------
  Shared numberVar TOTAL :=0 ; ←変数宣言および初期化
  "";              ←空白の文字列を返す
                  (レポート上に何も表示させない為)
 ↑式の内容ここまで -------------------------------------------------------

 [レポートヘッダー]上の好きな所に総計変数宣言を配置する。

②[グループヘッダー]
 小計変数宣言 ←式の名前

 ↓式の内容はここから -----------------------------------------------------
  Shared numberVar SUBTOTAL :=0 ; ←変数宣言および初期化
  "";               ←空白の文字列を返す
                    (レポート上に何も表示させない為)
 ↑式の内容ここまで ------------------------------------------------------
 
 [グループヘッダー]上の好きな所に総計変数宣言を配置する。

③[詳細]
 演算処理 ←式の名前

 ↓式の内容はここから -----------------------------------------------------
 Shared NumberVar TOTAL;      ←変数宣言のみ
 Shared NumberVar SUBTOTAL ;    ←変数宣言のみ

 WhilePrintingRecords;       ←書いていた方が良い(動作内容はヘルプで)
 TOTAL:= TOTAL+{指示書.数量};    ←総計の足し込み処理
 SUBTOTAL:= SUBTOTAL+{指示書.数量}; ←小計の足し込み処理

 "";                ←空白の文字列を返す
                    (レポート上に何も表示させない為)
 ↑式の内容ここまで -------------------------------------------------------
 ※{指示書.数量}はレポート上の数量の意味

 [詳細]上の好きな所に総計変数宣言を配置する。

④[グループフッター]
 HSUBTOTAL ←式の名前

 ↓式の内容はここから -----------------------------------------------------
 Shared NumberVar SUBTOTAL ;    ←変数宣言のみ

 SUBTOTAL;             ←小計を表示する
 ↑式の内容ここまで ------------------------------------------------------

 [グループフッター]の小計を表示させたい場所に配置する。

⑤[レポートフッター]
 HTOTAL ←式の名前

 ↓式の内容はここから -----------------------------------------------------
 Shared NumberVar TOTAL ;      ←変数宣言のみ

 TOTAL;               ←総計を表示する
 ↑式の内容ここまで ------------------------------------------------------

 [レポートフッター]の総計を表示させたい場所に配置する。
----------------------------------------------------------------------------

VB6 Crystal Report

2011年9月16日金曜日

VB6でIPアドレスを取得する方法

IPアドレスを取得するには下記の通りですある。

' 前処理----------------------------------------------------
Option Explicit

Private Type WSADATA
wVersion As Integer
wHighVersion As Integer
szDescription As String * 257
szSystemStatus As String * 129
iMaxSockets As Integer
iMaxUdpDg As Integer
lpVendorInfo As Long
End Type

Private Type hostent
h_name As Long
h_aliases As Long
h_addrtype As Integer
h_length As Integer
h_addr_list As Long
End Type

Private Declare Sub vbMemMove1 Lib "kernel32" Alias "RtlMoveMemory" & _
(dst As Any, ByVal src As Long, ByVal num As Long)
Private Declare Sub vbMemMove2 Lib "kernel32" Alias "RtlMoveMemory" & _
(dst As Long, ByVal src As Long, ByVal num As Long)

Private Declare Function gethostname Lib "wsock32.dll" & _
(ByVal Name As String, ByVal namelen As Long) As Long
Private Declare Function gethostbyname Lib "wsock32.dll" (ByVal Name As String) As Long
Private Declare Function WSAStartup Lib "wsock32.dll" & _
(ByVal wVersionRequested As Integer, lpWSAData As Any) As Long
Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
Private Declare Function WSAGetLastError Lib "wsock32.dll" () As Integer
' 前処理 ここまで-------------------------------------------------


' IPアドレスを取得----------------------------------------------------
Public Function GetIpAddress() As String

Dim wsa As WSADATA
Dim sName As String * 65
Dim he As hostent
Dim p As Long
Dim b(3) As Byte

If WSAStartup(&H101, wsa) <> 0 Then Exit Function

If gethostname(sName, 64) = 0 Then
p = gethostbyname(sName)
If p <> 0 Then
vbMemMove1 he, p, 16
vbMemMove2 p, he.h_addr_list, 4
vbMemMove1 b(0), p, 4
GetIpAddress = b(0) & "." & b(1) & "." & b(2) & "." & b(3)
End If
End If

WSACleanup

End Function
'-----------------------------------------------------------------------
VB6 IPアドレス

VBAでダブルクォーテーションを扱う方法

VBAでダブルクォーテーションを扱う場合は
""" のようにダブルクォーテーションを三つ重ねます。

-------------------------------------------------------------

Sheets(シート名).Cells(1, 1).Value = """ & "使用方法" & """
"使用方法" と表示されます。

-------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAでシートを追加する方法

新しくシートを追加します。
引数の指定により、追加する場所、枚数、追加するシートの種類を指定することが可能です。

構文 Object.Add(Before, After, Count, Type)

設定項目 内容
Object Worksheetsオブジェクトコレクション,
Sheetsオブジェクトコレクション,
Chartsコレクションオブジェクト
Before 指定したシートの直前に新しいシートを追加 [省略可能]
After 指定したシートの直後に新しいシートを追加 [省略可能]
Count 追加するシートの枚数を指定。既定値は1 [省略可能]
Type 追加するシートの種類(上記表参照) [省略可能]


次のサンプルはアクティブブックの一番最後に、シート名を指定して新規ワークシートを追加します。

----------------------------------------------------------------
Sub Sheet_add()
'操作シートの後ろに挿入します。
Worksheets.Add(after:=Worksheets("操作")).Name = "シート名入力"
End Sub
-----------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAで指定のシートを削除する方法

VBAでシートを削除する方法です。

Worksheets("シート名を入力").Deleteで削除します。
ただし、存在しないシートを指定した場合はエラーになるので、
削除する前にシートが存在するかチェックする必要があります。

シートが存在するかのチェックはこちらから↓
VBAで対象のシートが存在するかチェックする方法

--------------------------------------------------------------
Sub Sheet_delete(sheetname As String)
'対象のシートが存在するかチェックを行う
'存在する場合は削除を実行
If Sheet_存在Check(sheetname) = True Then
Application.DisplayAlerts = False '確認メッセージを表示しない
Worksheets(sheetname).Delete
Application.DisplayAlerts = True '確認メッセージを表示する。
End If

End Sub
----------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAで対象のシートが存在するかチェックする方法

VBA でマクロを組んで定型的なことを自動化する場合に、目的のシートやブックが
存在するかどうかのチェックは必ず必要になると思います。

そのシートがあるのに新規作成すると、エラーで終了します、
無い場合は作成するためにも存在のチェックが必要になります。

ここで紹介する Function は、アクティブになっているワークブックに、
引数 SheetName のシートが実際にあるかチェックします。

あれば True なければ False を返します。
Sheets.Count でワークブックにシートが何枚あるかわかります。

Sheets(i).Name でシートの名前を順番に取得できます。

For ループで1枚ずつ、シートの名前が SheetName と等しいかチェックして います。


-------------------------------------------------------------------
'SheetName のシートが実際にあるかチェックする
Function Sheet_存在Check(sheetname As String) As Boolean
Dim i As Integer

Sheet_存在Check = False

For i = 1 To Sheets.Count
If Sheets(i).Name = sheetname Then
Sheet_存在Check = True
Exit For
End If
Next

End Function

----------------------------------------------------------

EXCEL VBA xls Excel2003

VBAでメッセージボックス(MsgBox)を表示させる方法

MsgBox関数を使ってメッセージを表示する方法です

基本の書式は下記の通りです。
MsgBox (表示文字列 ,[ボタン書式] ,[タイトル])
 
表示文字列:表示したい文字列を入力(省略不可)。複数行を設定するときは,
        改行する位置に,,VbCrLfを挿入します。
ボタン書式:表示するボタンの種類,使用するアイコンのスタイル,標準ボタン等の値
        の合計値です。省略時は[OK]ボタンのみ表示。
タイトル :メッセージボックスのタイトルバーに表示する文字列です。
       省略時はアプリケーション名が表示されます。

■アイコン
定数         内容
vbCritical      警告メッセージアイコン
vbQuestion      問い合わせメッセージアイコン
vbExclamation    注意メッセージアイコン
vbinformation    情報メッセージアイコン


■ボタン
定数           内容
vbOKonly         [OK]ボタンのみ表示
vbOKCancel       [OK] [キャンセル] ボタン表示
vbAbortRetryignore  [中止] [再試行] [無視] ボタン表示
vbYesNoCancel     [はい] [いいえ] [キャンセル] ボタン表示
vbYesNo         [はい] [いいえ] ボタン表示
vbRetryCancel     [再試行 ] [キャンセル ] ボタン表示


■標準ボタン
定数         内容
vbDefaultButton1  第1ボタンを標準ボタンにする
vbDefaultButton2  第2ボタンを標準ボタンにする
vbDefaultButton3  第3ボタンを標準ボタンにする


-----------------------------------------------------------------------
【サンプルコード】 
  MsgBox "警告メッセージを表示します。", vbCritical, "警告"

  MsgBox "無視ボタンを標準ボタンに設定しました。" _
          & VbCrLf& "ここで改行して表示します。" _
         , vbAbortRetryIgnore + vbInformation + _
         vbDefaultButton3, "標準ボタンの設定例"
-----------------------------------------------------------------------

MsgBox関数の戻り値を利用して条件分岐

MsgBox関数の戻り値を利用して条件分岐できます。表示されたダイアログボックス上で選択されたボタンの種類を,戻り値を使って,次に実行する処理を分岐します。
■戻り値
定数       内容
vbOK          [OK]ボタン
vbCancel        [キャンセル] ボタン
vbAbort         [中止] ボタン
vbRetry        [再試行] ボタン
vbignore        [無視] ボタン
vbYes         [はい] ボタン
vbNo          [いいえ] ボタン


------------------------------------------------------------------------
【サンプルコード】
   If vbYes = MsgBox("はいボタンを押してください。", vbYesNo, "終了確認") Then
      MsgBox "OK"
   Else
      MsgBox "押し間違えましたね。"
  End If
------------------------------------------------------------------------

サンプルを作成していますので、下記よりご自由にダウンロードして下さい。


------------------------------------------------------------------------

EXCEL VBA xls Excel2003

VB6で文字数でなくバイト数で文字操作をする方法

通常のMid()、Left(),Right()関数ではバイト数に関係なく、文字数で文字操作が行われてします。
半角(1バイト)、全角(2バイト)の区別ありません。

バイト単位で文字操作を行いたい場合は、MidB(),LeftB(),RightB()を使用します。
ただ、MidB()関数は通常通り使用できません。
一旦 、StrConvでvbFromUnicodeに変換して仕様します。
使用方法は下記の通りです。
StrConv(MidB(StrConv(."ブログF2", vbFromUnicode), 1, 6), vbUnicode)
※ブログがかえされる。

---------------------------------------------------------------------------
Mid()関数とMidB()関数の違い

Dim astr as String

astr = "ブログはFC2"

MsgBox Mid(astr,1,6) '「ブログはFC」と表示される
MsgBox StrConv(MidB(StrConv(astr, vbFromUnicode), 1, 6), vbUnicode)
'「ブログ」と表示される

'※MidBを使用する場合はStrConvを使用してvbFromUnicodeに変換する必要があります。
'  ただし、vbFromUnicodeのままでは文字化けするので、
'  再度、StrConvを使用して vbUnicodeにする必要があります。
'  LenB()、RightB()関数の使用方法も同様です

---------------------------------------------------------------------------
補足
バイト単位の文字数の確認はLenB()関数を使用します。

使用方法は

LenB(StrConv("ブログはFC2", vbFromUnicode)) ' 11 がかえされる

Len("ブログはFC2") '7 がかえされる

---------------------------------------------------------------------------

VB6 関数

VBAでコメントのサイズを変更する方法

コメントのサイズを変更したい場合は↓下記の通り追加します。
'コメントのサイズ変更
Sheets("シート名").Cells(row,col).Comment.Shape.Width = 130
Sheets("シート名").Cells(row,col).Comment.Shape.Height = 30

↓下記のようにするとコメントのテキストサイズにあわせて自動でサイズ調整します。
・・・たぶんですが、試してないので分かりません。
'自動調整
Sheets("シート名").Cells(row,col).Comment.Shape.TextFrame.AutoSize = True

※コメントを記入する方法はこちらから

--------------------------------------------------------------------
EXCEL VBA xls Excel2003

VBAでコメントを記入する方法

Sheets("シート名").Cells(row,col).AddComment Text: = "コメントの記入"
↑上記の方法でExcelのセルにコメントを記入出来ます。
しかし設定しようとしているセルのすでにコメントが設定されている場合はエラーとなります。

そのため、先にコメントが記入されているか確認する必要があります。

Sheets("シート名").Cells(row,col).NoteText = ""
↑を使用して判定する。

Sheets("シート名").Cells(row,col).ClearComments
コメントが入っていれば↑を使用してコメントをクリア
※コメントの上書き、追加は出来ないみたいです。

サンプルはコメントが記入されている場合は以前の内容を引継げるように、
コメントの有無を確認しあれば、記入されているコメントをastrに格納し、
追加する出来るようにしています。

追加の必要が無ければ、コメントをクリアしてaddするのみでOKです。

--------------------------------------------------------------------------
Dim astr as String

If Sheets("シート名").Cells(row,col).NoteText = "" Then
    '上書きをしてくれないのでこれが無いとエラーになる
   Sheets("シート名").Cells(row,col).ClearComments
   Sheets("シート名").Cells(row,col).AddComment Text:= "コメント記入"
Else
  astr = Sheets("シート名").Cells(row,col).Comment.Text
   '上書きをしてくれないのでこれが無いとエラーになる
  Sheets("シート名").Cells(row,col).ClearComments
  Sheets("シート名").Cells(row,col).AddComment Text:= astr & vbCrLf & "コメント記入"
End If

--------------------------------------------------------------------------
※vbCrLf は改行文字(改行コード)になります。

--------------------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAでスペースを削除する方法

LTrim(文字列)

RTrim(文字列)

Trim(文字列)


LTrim関数,RTrim関数,Trim関数を利用して文字列の中からスペースを取り除くことができます。
引数に設定した文字式から,全角,半角にかかわらず,
LTrim関数は先頭のスペースを,
RTrim関数は末尾のスペースを,
Trim関数は先頭と末尾のスペースをを取り除きます。

------------------------------------------------------------------------
Sub スペース削除()
  Dim astr as String

  astr = "   FC2ブログ     "
  MsgBox "@" + astr + "@"         ' 「@   FC2ブログ     @」と表示
  MsgBox "@" + LTrim(astr) + "@"    ' 「@FC2ブログ     @」と表示
  MsgBox "@" + RTrim(astr) + "@"    ' 「@   FC2ブログ@」と表示
  MsgBox "@" + Trim(astr) + "@"     ' 「@FC2ブログ@」と表示

End Sub
------------------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAで数値を文字列に変換する方法

Str(数値)

----------------------------------------------------------------------
Sub VAL関数()
    Dim A As Integer
    Dim B As Integer

    A = 123
    B = 12
    MsgBox A + B        '135が表示されます
    MsgBox str(A) + str(B)  '12312が表示されます。(文字列の連結)
End Sub
----------------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAで文字列を数値に変換する方法

Val(文字列)

Val関数は数字(String型)を適当な数値型のデータに変換します。
※ただし、数値に変換できない文字を読み込んだ時点で変換を中止します。

---------------------------------------------------------------
Sub VAL関数()
    Dim A As String
    Dim B As String

    A = "123"
    B = "15"
    MsgBox Val(A) + Val(B)   ’138(123+15)が表示されます。
    MsgBox A + B        '12315が表示されます。 
  End Sub    
----------------------------------------------------------------   

EXCEL VBA xls Excel2003

VBAで大文字/小文字の変換を行う方法

Ucase(文字列)

Lcase(文字列)

Ucase関数はアルファベットの小文字大文字に,
Lcase関数はアルファベットの大文字小文字に変換します。

------------------------------------------------------------------------
Sub Ucase_Lcase()
    Dim astr As String
    astr = "FC2ブログ-Mocho"

    MsgBox UCase(astr)  ’「FC2ブログ-MOCHO」と表示されます
    MsgBox LCase(astr)  ’「fc2ブログ-mocho」と表示されます
  End Sub   
------------------------------------------------------------------------

EXCEL VBA xls Excel2003

2011年9月14日水曜日

VBAで指定の文字数を切出す(抽出)する方法

Mid(文字列,抽出開始位置,抽出文字数)

Right(文字列,抽出文字数)

Left(文字列,抽出文字数)

Mid関数は指定開始位置から指定文字数までを抽出
Right関数は右から指定文字数までを抽出
Left関数は左から指定文字数までを抽出

--------------------------------------------------------------
Sub strTyuusyutu()
    Dim astr As String
    astr = "FC2ブログ-Mocho"

    MsgBox Mid(astr, 3, 3) '「ブログ」と表示されます    
    MsgBox Right(astr, 5)  '「Mocho」と表示されます 
    MsgBox Left(astr, 3) '「FC2」と表示されます
End Sub
--------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAで文字数を調べる方法

Len(文字列式) 
Len関数は指定した文字列式に含まれる文字数を返します。


------------------------------------------------------------------
Sub example_len()
   Dim astr As String

   astr = "FC2ブログ"
   MsgBox "文字数: " & Len(astr)  ’「6」が表示されます 
End Sub

-------------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAで数式を設定する方法

プログラムからセルに数式を設定して、Excelの機能を使って合計を求めたりすることがでるます。
もちろん、Formulaプロパティに文字列として数式を設定しているだけなので、
合計だけでなくさまざまな数式を入力することができます。
Range("A6").Formula = "=SUM(A1:A5)"

さらにCellアドレスも併用すると、ループ処理などで利用できるようになります。
AddressプロパティはExcelではおなじみの"A1"とか"B3"等の文字列を返します。

Cells(6, 3).Formula = "=SUM(" & Cells(1, 3).Address(False, False) & ":" & Cells(5, 3).Address(False, False) & ")"

-------------------------------------------------------------------------

EXCEL VBA xls Excel2003

SQL 関数 - 余り、四捨五入、切り捨て、切り上げ、数値フォーマット等

・絶対値
ABS() 関数は、絶対値を返す。
この例では、受注数にマイナスがあっても正数として問い合わされる。

SELECT 品番, ABS(受注数) FROM 受注
ORDER BY 品番
;

・余り
MOD() 関数は、余りを返す。
この例では、受注数を 1000 で割ったあまりが問い合わされる。

SELECT 品番, MOD(受注数, 1000) FROM 受注
ORDER BY 品番
;

・四捨五入
ROUND() 関数は、四捨五入結果を返す。
この例では、受注数の小数第 3 位を四捨五入して、小数 2 桁の結果が問い
合わされる。

SELECT 品番, ROUND(受注数, 2) FROM 受注
ORDER BY 品番
;

・切り捨て
TRUNC() 関数は、切り捨て結果を返す。
この例では、受注数の小数 3 桁目以降を切り捨て、小数 2 桁の結果が問い
合わされる。

SELECT 品番, TRUNC(受注数, 2) FROM 受注
ORDER BY 品番
;

・切り上げ

切り上げ関数が見当たらないので。
TRUNC() に +9 すればOKでしょう。
この例では、受注数の小数第 3 位を切り上げたと同じ結果になります。

SELECT 品番, TRUNC(受注数 + .009, 2) FROM 受注
ORDER BY 品番
;

・数値から文字列へ変換 (数値フォーマット、書式変換)

TO_CHAR() 関数は、数値を文字列型に変換します。
この例では、受注数を文字列として返します。

SELECT 品番, TO_CHAR(受注数) FROM 受注
ORDER BY 品番
;

・三桁毎に数値にカンマ「,」を入れたい場合、次のようにします。

SELECT 品番, TO_CHAR(受注数, '999,999,999,999') FROM 受注
ORDER BY 品番
;

・小数点以下をフォーマットする場合は、次のようにします。

SELECT 品番, TO_CHAR(受注数, '999,999,999,999.99') FROM 受注
ORDER BY 品番
;

・ゼロ埋め(0 埋め) フォーマットする場合は、次のようにします。

SELECT 品番, TO_CHAR(受注数, '0000000000') FROM 受注
ORDER BY 品番
;
 123 → 0000000123

・文字列から数値へ変換
TO_NUMBER() 関数は、文字列を数値に変換します。
この例では、受注数を文字列としたものを、また数値に変換しています。
現実的な例ではありませんが機能はわかるはずです。

SELECT 品番, TO_NUMBER(TO_CHAR(受注数)) FROM 受注
ORDER BY 品番
;

---------------------------------------------------------------------------

Oracle SQL 関数

VBAを使用した文字列の変換 全角、半角等

【書式】 StrConv文字列式変換形式

文字列式:変換する文字列です。
変換形式:実行する変換の種類の合計値として設定。

定数           内容
vbUpperCase    大文字に変換
vbLowerCase    小文字に変換
vbProperCase    各単語の先頭の文字を大文字に変換
vbWide       半角文字を全角文字に変換
vbNarrow       全角文字を半角文字に変換
vbKatakana     ひらがなをカタカナに変換
vbHiragana     カタカナをひらがなに変換
vbUnicode      システム既定のコードページを使って文字列をUnicodeに変換
vbFromUnicode   文字列をUnicodeからシステム既定のコードページに変換



EXCEL VBA xls Excel2003

VBAで開いているファイルを閉じる方法 ※確認メッセージも出さない

ファイルを閉じる方法
SAVEするかどうかのメッセージボックスを表示
Workbooks(OpenFilename).Close

SAVEせずに閉じる
Workbooks(OpenFilename).Close savechanges:=False

SAVEして閉じる
Workbooks(OpenFilename).Close savechanges:=True
※緑色も文字は対象のファイル名に置き換えてください。

※クリップボードにデータが残っている場合は、
  別で貼付けに使うかと聞いてくるメッセージボックスが表示されてしまう場合があるので
Application.DisplayAlerts = False
でメッセージを出さないようにする。もちろんTrueにすると確認メッセージを表示

-----------------------------------------------------------------
Dim OpenFilename As Strig

Sub File_Close()
OpenFilename = "BBB.xls"

'開いたファイルを閉じる
Application.DisplayAlerts = False '確認メッセージを出さない

Workbooks(OpenFilename).Close savechanges:=False '保存せずに閉じる

Application.DisplayAlerts = True '確認メッセージを出す

End Sub
-----------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAを使用して対象のファイルをアクティブにする方法 シート選択も

Windows(ThisFilename).Activate
※赤文字にアクティブにしたいファイル名を入力

Sheets("データ").Select
※対象のシートを選択

--------------------------------------------------------------------------
Dim ThisFilename As String

Sub Data_File_Select()
ThisFilename = "AAA.xls"

Windows(ThisFilename).Activate
Sheets("データ").Select

End Sub
--------------------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAを使用してEXCELのシート上のデータをすべて削除する方法

オートフィルタが入っている場合、すべて削除できない場合があるので、
オートフィルタを削除してから、実際の削除を実行する。

オートフィルタを使用しているかの調査
Worksheets("データ").AutoFilterMode = True
※Trueならオートフィルタを使用、Falseなら未使用

後は下記を参照


-------------------------------------------------------------------------
Dim ThisFilename As String

Sub Data_copy()
ThisFilename = "AAA.xls"

'対象のファイルをアクティブにする
Windows(ThisFilename).Activate
'対象のシートを選択する
Sheets("データ").Select

'オートフィルターが入っているかのチェック
If Worksheets("データ").AutoFilterMode = True Then
Selection.AutoFilter 'オートフィルターが入っている場合は削除
End If

'すべてのセルを選択
Cells.Select
'クリアする
Selection.ClearContents

End Sub
-----------------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAを使用して対象のファイルを開く方法

ファイル検索ウィザードを開いて対象ファイルを選択して開く方法

ウィザードを開く
Application.GetOpenFilename("EXCELファイル (*.xls),*.xls")
※赤字で対象ファイルの指定

Filename$だとフルパスで名前を取得 ※ C:\フォルダ\AAA.xls
Dir(Filename$)だとファイル名のみ   ※AAA.xls


------------------------------------------------------------------
Dim OpenFilename As String

Sub Book_open()

'ウィザードを開いて対象ファイルを検索
Filename$ = Application.GetOpenFilename("EXCELファイル (*.xls),*.xls")
' OpenFilename = Filename$ 'フルパス付き
OpenFilename = Dir(Filename$) 'ファイル名のみ

'ファイルを開く
Workbooks.Open OpenFilename

End Sub
-------------------------------------------------------------------

EXCEL VBA xls Excel2003

VBAを使用したEXCEL描画機能の一旦停止

描画機能を一旦停止し処理を高速に行う。
画面もチラつかないので、見た目もスマートかな?

Sub Main()

'描画機能を一旦停止 (処理を高速に行なうため)
Application.ScreenUpdating = False

--処理の記述--

'描画機能の再開
Application.ScreenUpdating = True

End Sub
-----------------------------------------------------------------------

EXCEL VBA xls Excel2003

2011年9月12日月曜日

マクロを実行しているファイル名の取得

①:ActiveWorkbook.Name -アクティブなっているExcelの名前の取得
②:ThisWorkbook.Name -マクロを実行しているExcelの名前

①を使用すると実行する場所によって違う名前を取ってくる場合があるので×
マクロを実行しているExcelの名前を取得したい場合は②を使用する。

-----------------------------------------------------------------------
Dim ThisFilename As String

Sub FileName取得
  ThisFilename = ThisWorkbook.Name 'マクロを実行しているファイル名を取得
END Sub
-----------------------------------------------------------------------

EXCEL VBA xls Excel2003

VB6での改行コード表示違い。XP , 2000

VB6においてWINDOWS XPと2000によって
vsFlexArray(vsFlexGrid)上の改行コードの表示が違います。

表示が違うというか、XPの場合は改行コードを表示しません。
よって改行コードが入っているかどうか確認できません。
WINDOWS 2000の場合は下記のような表示になります。
[・ABCDE]
[・XYZXA]
改行が[・]で表示されますが、
WINDOWS XPの場合は
[ABCDE]
[XYZXA]
となにも表示されないので、改行が入っているかどうか分からないので、
帳票のよっては先頭に改行が入って入るために表示されない不具合が発生します。

WINDOWS 2000の場合は [・]が表示されるため、画面上でおかしいなと分かるのですが、
XPの場合は[・]が表示されないため、マスター上は問題無いのに帳票に表示されないのはなぜ?
っとなってしまいました。

2000では[・]でおかしいと判断できるので、ユーザー側でかって修正するのですが、
XPではユーザー側で不具合箇所が特定できないため、連絡が入ります。
VBの開発環境はWINDOWS 2000のままなので、たまたま発覚しましたが・・・。

不具合の回避策を色々と探したのですが、
改行を[・]と表示する WINDOWS 2000自体がバグである為、
XPで[・]表示することは不可能でした。

よって、取りあえずの回避策として以下の2点の実施です。
・先頭に改行が入る場合は、ExcelからvsFlexArrayに貼付けを行なった場合に発生。
 よって、貼付けを行なう時に先頭に改行コードが入って入れば削除して貼付けを実施
VB6での改行文字調査
・現状、改行が先頭に入っているのを確認する為、SQL文を発行し該当分を修正
 SQLでの改行文字調査

で、取りあえずは回避です。

XPと2000では微妙に動きが違ったりと修正が必要だったりします。

.NETに移行もしたいのですが、マンパワーが圧倒的に足りません。

------------------------------------------------------
VB6 FlexArray 改行

SQLでの改行文字の調査

SQL文で改行文字を指定する方法は下記の通りです。

SELECT
  受注番号
FROM
  受注一覧
WHERE
  SUBSTR(品名,1,1) = CHR(10)

上に例は品名に一文字目に改行が入っている受注番号を取ってくるSQL文です。

Oracle 10g SQL

VB6での改行文字調査

VB6での改行文字を指定する方法は、下記の通りです。

アスキーコードに変換して調べます。
改行コードはアスキーコードで 10 となります。

If  Asc(left(文字列, 1)) >= 10 Then
   MsgBox "改行コードです。"
End If


例は一文字目に改行コードが入っている場合です。

Microsoft VB6