ノーツからエクセルを操作するにはエクセルオブジェクトを作成して操作します。
Dim アプリ As Variant
Set アプリ = CreateObject ({Excel.Application})
詳しくは次のリンクを参照してください。
![[Domino]エクセルを操作する](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/10/ノーツ/ドミノ-1280-670.png)
ノーツからエクセルを操作するにはエクセルオブジェクトを作成して操作します。
Dim アプリ As Variant
Set アプリ = CreateObject ({Excel.Application})
詳しくは次のリンクを参照してください。
![[Domino]ノーツドミノでつかう言語](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/10/ノーツ/ドミノ-1280-670.png)
ノーツ/ドミノ(Notes/ Domino)で使われるおもな言語にはロータススクリプト(Lotus Script)とロータス式言語(Lotus 式言語やアットマーク関数と呼ばれます)があります。サーバーサイドではJavaも使えます。ロータススクリプトもロータス式言語もコードを保存するときに自動でコンパイルされますので、普段はコンパイルを意識することはありません。
ロータススクリプトは VBScript に似たところがある言語ですが、後発だけあってエラー処理や変数の型などはかなり改善されて使いやすくなっています。Visual Basic にそっくりです。
ノーツ/ドミノをウェブ関係で使うと、JavaScriptやJavaを使います。表示まわりではHTML/CSSも使うでしょう。
Windows上でドミノサーバーを動かしていると、管理用のプログラムを C# や VBScript で書くことがあります。C#コンパイラ(csc.exe)は.NETの実行環境に含まれています。VBScriptはWindows標準コマンドWScriptやCScriptからソースコードをコンパイルせずにコマンドプロンプトやマウスダブルクリックで実行することができます。
![[言語比較]検索される文字値の検索値より右側](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
○番目の検索値より右側を返すユーザー関数です
/// <summary>
/// ○番目の検索値より右側
/// </summary>
/// <returns>検索値より右側</returns>
/// <param name="source">検索される値</param>
/// <param name="key">検索値</param>
/// <param name="nth">何番目の検索値?(1-)</param>
string StrRight(string source, string key, int nth = 1)
{
string result = @"";
if(1 >nth)
{
return result;
}
int start = 0;
int next;
for(int i = 1; i <= nth; i++)
{
next = source.IndexOf(key, start, StringComparison.CurrentCultureIgnoreCase);
if(0 > next)
{
start = 0;
break;
}
start = next + key.Length;
}
if(0 < start)
{
result = source.Substring(start);
}
return result;
}
最初の検索値より右側を返す式はこちらです
=LET(VKEY,検索値,VVALUE,検索される値,VERROR,エラー時の値,IFERROR(MID(VVALUE,FIND(VKEY,VVALUE)+LEN(VKEY),LEN(VVALUE)),VERROR))
最後の検索値より右側を返す式はこちらです(LETでまとめていません)
検索値を仮の検索値へ置換し、切り出した後に検索値を戻しています
=IF(ISERROR(FIND(検索値,検索される値)),検索される値,MID(検索される値,FIND(仮の検索値,SUBSTITUTE(検索される値,検索値,仮の検索値,LEN(検索される値)-LEN(SUBSTITUTE(検索される値,検索値,""))))+1,LEN(検索される値)))
左側から検索される値を検索します
文字値 = StrRight (検索される値,検索値,比較方法,何番目の検索値?)
文字値 = StrRight (検索される値,検索値,比較方法)
文字値 = StrRight (検索される値,検索値)
右側から検索される値を検索します
文字値 = StrRightBack (検索される値,検索値,比較方法,何番目の検索値?)
文字値 = StrRightBack (検索される値,検索値,比較方法)
文字値 = StrRightBack (検索される値,検索値)
比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
戻り値には検索値を含みません
例: {ABC} = StrRight ({ABCABC},{c},1,2)
![[言語比較]検索される文字値の検索値より左側](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
○番目の検索値より左側を返すユーザー関数です
/// <summary>
/// ○番目のキーより左側
/// </summary>
/// <returns>さがす文字列より左側</returns>
/// <param name="source">検索される値</param>
/// <param name="key">検索値</param>
/// <param name="nth">何番目の検索値?(1-)</param>
string StrLeft(string source, string key, int nth = 1)
{
string result = source;
if(1 > nth)
{
result = @"";
return result;
}
int start = 0;
int next;
for(int i = 1; i < nth; i++)
{
next = source.IndexOf(key, start, StringComparison.CurrentCultureIgnoreCase);
if(0 > next)
{
break;
}
result = source.Substring(0, next);
start = next + key.Length;
}
return result;
}
最初の検索値より左側を返す式はこちらです
=LET(VVALUE,検索される値,VKEY,検索値,VERROR,エラー時の値,IFERROR(LEFT(VVALUE,FIND(VKEY,VVALUE)-1),VERROR))
最後の検索値より左側を返す式はこちらです(LETでまとめていません)
=LEFT(検索される値,FIND(仮の検索値,SUBSTITUTE(検索される値,検索値,仮の検索値,LEN(検索される値)-LEN(SUBSTITUTE(検索される値,検索値,"")))-1)
左側から検索される値を検索します
文字値 = StrLeft (検索される値,検索値,比較方法,何番目の検索値?)
文字値 = StrLeft (検索される値,検索値,比較方法)
文字値 = StrLeft (検索される値,検索値)
右側から検索される値を検索します
文字値 = StrLeftBack (検索される値,検索値,比較方法,何番目の検索値?)
文字値 = StrLeftBack (検索される値,検索値,比較方法)
文字値 = StrLeftBack (検索される値,検索値)
比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
戻り値には検索値を含みません
例: {ABCAB} = Strleft ({ABCABC},{c},1,2)
左側から検索される値を検索します
文字値 = @Left (検索される値,検索値)
右側から検索される値を検索します
文字値 = @LeftBack (検索される値,検索値)
戻り値には検索値を含みません
例: {AB} = @Left ({ABCABC},{C})
大文字小文字、全角半角を区別します
例: {ABCab} = @Left ({ABCabc},{c})
![[言語比較]値が範囲に納まるか](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
値が範囲内に収まるか否かを確認します
ユーザー関数名をIsRangeやRangeにすることがあります
↓戻り値がTrueなら範囲に収まる、Falseなら収まらないとしています。型はintやdoubleなどにします
bool 関数名(型 下限, 型 上限, 型 値)
{
if (下限 > 上限)
{
型 一時的 = 下限;
下限 = 上限;
上限 = 一時的;
}
if (下限 > 値)
{
return false;
}
if (上限 < 値)
{
return false;
}
return true;
}
↓戻り値がTrueなら範囲に収まる、Falseなら収まらないとしています。型はLongやDoubleなどにします
Function 関数名 (下限 As 型, 上限 As 型, 値 As 型) As Boolean
関数名 = False
If 値 > 上限 Then
Exit Function
Elseif 値 < 下限 Then
Exit Function
End If
関数名 = True
End Function
また Select を使って書くこともできます↓
Function 関数名 (下限 As 型, 上限 As 型, 値 As 型) As Boolean
関数名 = False
Select Case 値
Case Is > 上限
Exit Function
Case Is < 下限
Exit Function
End Select
関数名 = True
End Function
![[言語比較]Err,Erl,Error : エラーを処理](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
実行時エラー(ランタイムエラー)が発生したときにどうするのか?というものです。
Err, Erl, Error は常に存在します
エラーが発生したときにどうするか定義します
On Error Resume Next
On Error Goto ラベル
例:
On Error Goto ラベル
処理
Exit Sub ' または Exit Function や Exit Property
ラベル:
エラー処理
Resume Next ’ エラーの次の行へ戻る
エラーが発生したときに『何もせず異常終了する』というときは次のようにします。この行より先はエラー対応をしません。
On Error Goto 0
似ている命令
On 番号 Goto ラベル1, ラベル2, ... ’ 番号によって異なるラベルへ制御を移す命令です。番号がゼロのときは何もしません
例 : On Err Goto ラベル ’ Err 変数の値(初期値は0)によってラベルへ制御を移します
※On 番号 Gosub ラベル, ・・・もあります。
初期化
Call Err.Clear ()
※ On Error や Exit でも Err が初期化されます
On Error Resume Next と、On Error Goto が使えます
On Error Goto ラベル:
・・・
ラベル:
・・・
On Error Resume Next
注意
最初の On Error より前は Err オブジェクトが存在しません
初期化
Call Err.Clear ()
※ On Error や Exit でも Err が初期化されます
On Error は Resume Next だけで、On Error Goto は使えません
On Error Resume Next
注意
最初の On Error より前は Err オブジェクトが存在しません
例:
On Error Resume Next
Call Err.Clear ()
処理
If 0 <> Err.Number Then
エラー処理
Call Err.Clear ()
End If
例 : @If (@IsError (評価式); エラー時の式; 正常時の式);
![[言語比較]プログラムのファイルパス](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
今動いているプログラムファイルのパス(ディレクトリとファイル)を取得してみましょう。現在のプログラムファイルであって、カレントディレクトリとは異なります
%~dp0
末尾に\マークが付きます
いくつかの方法があります。プログラムを使用する環境で正しい値が返ってくることを確認しましょう
// .NET5 以降のばあい(ディレクトリのみ)
using System;
string ディレクトリ = System.AppContext.BaseDirectory;
カミュプリィがつくった次のプログラム↓は、↑この方法を使っています
// プロセスを使う方法
using System.Diagnostics;
string パス = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
// フォームを使う方法(コンソールアプリ可)
using System.Windows.Forms;
パス = Application.ExecutablePath;
// コマンドラインを使う方法
// デバッグでは *.dll になり、単一ファイルにまとめると *.exe になる
using System;
using System.IO;
c.IO.FileInfo ファイル = new System.IO.FileInfo(System.Environment.CommandLine.Replace("\"", "")); // パラメータがないと仮定
string パス = System.IO.Path.Combine(ファイル.DirectoryName, ファイル.Name);
// 与えられた情報を使う方法
// デバッグでは *.dll になり、単一ファイルにまとめるとブランクになる
using System.Reflection;
パス = System.Reflection.Assembly.GetExecutingAssembly().Location;
CGIとCronで共通のパスを取得できませんでした。詳しくは次の記事にまとめてあります↓
ノーツドミノではデータベースにプログラムが含まれますので、データベースのパスを取得します
データベースのファイル名に日本語を使うと、環境によって問題が起こることがあります。また&記号を使うと、検索で問題が起こることがありますので注意しましょう
Lotus Script には普遍的な方法と、ユーザーインターフェース(UI)から取得する方法のふたつがあります。ここでは便宜的に、普遍的な方法をバックエンドといい、ユーザーインターフェースをフロントエンドといいます
↓次はバックエンドの方法です。フロントエンドでも動きます
Dim セッション As New NotesSession()
パス = セッション.CurrentDatabase.FilePath
↓こちらはユーザーインターフェース(UI)から取得する方法です
Dim ユーザーインターフェース As New NotesUIWorkspace()
パス = ユーザーインターフェース.CurrentDatabase.FilePath
式言語では、Lotus Script でいうフロントエンドしかありません
パス = @Subset(@DbName; -1);
@DbNameは{サーバー; パス}を複数値で戻します。ここから最後のひとつの値を得るために@Subset(; -1)を使います
![[言語比較]Call : 関数を呼ぶ](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
Call ファイル名 : 呼び出すバッチと呼び出されるバッチで変数を共有します
ファイル名 : 変数を共有しない呼び出しで、制御が戻ってきません
Start ファイル名 : 呼び出したら待たずに次へ進みます
() は省略できることが多いです
Call を省略するときは () も省略します
Call だけ省略し () を付けると、意味が変わります
次のとおり色々な書き方ができます
受け渡し値がないとき
受け渡し値があるとき(関数側の ByVal/ByRef 設定どおり)
これはエラーになります
受け渡し値があるとき(常に ByVal を強制)
Call を付けるときは () も付けます
Call を省略するときは () も省略します
Call だけ省略し () を付けると、意味が変わります
次のとおり色々な書き方ができます
受け渡し値がないとき
受け渡し値があるとき(関数側の ByVal/ByRef 設定どおり)
受け渡し値があるとき(常に ByVal を強制)
クラスの値を受け渡すと動作が変わります(アクセス権がどうの)
クラス名.パラメータ = 値
関数名 (クラス名.パラメータ) ’ クラス名.パラメータの値は変化しません
![[言語比較]Class : クラスをつくる](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
Lotus Scriptのクラスは、VBScriptと異なっているところが多いです。
Class クラス名 As 元クラス ’別のクラスから引き継ぐことができます
’最初に実行されます
Sub New (変数名 As 型).元クラス (変数名 As 型) ’値を受け取ることができます
End Sub
’最後に実行されます
Sub Delete ()
End Sub
Public Sub 戻り値がない関数名 (変数名 As 型)
End Sub
‘使うときは「Call クラスオブジェクト.関数名(値)」です
Public Function 戻り値がある関数名 (変数名 As 型) As 型
Me.戻り値がある関数名 = 戻り値 ’値を返します
End Function
‘使うときは「値 = クラスオブジェクト.関数名(値)」です
‘または「Set 値 = クラスオブジェクト.関数名(値)」です
Public Property Set プロパティ名 As 型 ‘ Lotus Script では Let は Set に統合されています
変数名 = Me.プロパティ名 ’値を受け取ります
(または) Set 変数名 = Me.プロパティ名 ’値を受け取ります
End Property
‘使うときは「クラスオブジェクト.プロパティ名 = 値」です
‘または「Set クラスオブジェクト.プロパティ名 = 値」です
Public Property Get プロパティ名 As 型
Me.プロパティ名 = 戻り値 ’値を返します
End Property
‘使うときは「値 = クラスオブジェクト.プロパティ名」です
‘または「Set 値 = クラスオブジェクト.プロパティ名」です
End Class
何も指定しないと Private、ByRef になります。
現在のクラスのなかで現在のクラスで定義された関数・プロパティ・変数を使うには、名前の先頭に Me. をつければOKです
Class クラス名 ’独立したクラスとして作成します
’最初に実行されます
Sub Class_Initialize () ’値を受け取れません
End Sub
’最後に実行されます
Sub Class_Terminate ()
End Sub
Sub 戻り値がない関数名 (変数名)
End Sub
‘使うときは「Call クラスオブジェクト.関数名(値)」です
Function 戻り値がある関数名 (変数名)
戻り値がある関数名 = 戻り値 ’値を返します
End Function
‘使うときは「値 = クラスオブジェクト.関数名(値)」です
‘または「Set 値 = クラスオブジェクト.関数名(値)」です
Public Property Set プロパティ名 ’Set はオブジェクトを受け取ります
Set 変数名 = プロパティ名 ’値を受け取ります
End Property
‘使うときは「Set クラスオブジェクト.プロパティ名 = 値」です
Public Property Let プロパティ名 ’Let はオブジェクト以外を受け取ります
変数名 = プロパティ名 ’値を受け取ります
End Property
‘使うときは「クラスオブジェクト.プロパティ名 = 値」です
Public Property Get プロパティ名
プロパティ名 = 戻り値 ’値を返します
End Property
‘使うときは「値 = クラスオブジェクト.プロパティ名」です
‘または「Set 値 = クラスオブジェクト.プロパティ名」です
End Class
なにも指定しないと Public、ByRef になります。
現在のクラスで定義されたプロパティをつかうときに、名前の先頭に Me. をつけるときがあります
VBAのクラスは Visual Basic Editor のメニューの挿入からクラスモジュールを選ぶことで作成できます。ひとつのページ(?)に複数のクラスを記述することができません
クラスをエクスポートすると、次のようなヘッダーが付いてきます
ここに記述したものすべては単一のクラス内のものとして扱われます
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "クラス名"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
(ここに関数ほかを記述します)
’最初に実行されます
Private Sub Class_Initialize() ’値を受け取れません
End Sub
'使うときは「New クラス名」です
’最後に実行されます
Private Sub Class_Terminate()
End Sub
'使うときは「Set クラス変数 = Nothing」です
Public Sub 戻り値がない関数名(変数名) ' 複数の変数を指定するときはカンマ(,)で区切ります
End Sub
'使うときは「Call クラスオブジェクト.関数名(値)」です
'または「Call クラスオブジェクト.関数名(変数名:=値)」です
Public Function 戻り値がある関数名(変数名)
戻り値がある関数名 = 戻り値 ’値を返します
End Function
'使うときは「値 = クラスオブジェクト.関数名(変数名)」です
'または「Set 値 = クラスオブジェクト.関数名(変数名)」です
Public Property Get プロパティ名
プロパティ名 = 戻り値 ’値を返します
End Property
'使うときは「値 = クラスオブジェクト.プロパティ名」です
Public Property Let プロパティ名(変数名) ’Let はオブジェクト以外を受け取ります
変数名 = プロパティ名 ’値を受け取ります
End Property
'使うときは「クラスオブジェクト.プロパティ名 = 値」です
Public Property Set プロパティ名(変数名) ’Set はオブジェクトを受け取ります
Set 変数名 = プロパティ名 ’値を受け取ります
End Property
'使うときは「Set クラスオブジェクト.プロパティ名 = 値」です
![[言語比較]切り上げ・切り捨て・四捨五入](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
=ROUNDUP(数値,桁数)
「数値」:切り上げしたい数値または、セルの位置を指定します。
「桁数」:切り上げしたい桁数を指定します。
=ROUNDDOWN(数値,桁数)
=TRUNK(数値,桁数)
「数値」:切り捨てしたい数値またはセルの位置を指定します。
「桁数」:切り捨てしたい桁数を指定します。※桁数のあつかいに関しては、ROUND 関数と同様です。
=INT(数値)
=TRUNK(数値)
小数点以下の数値を切り捨てて整数にするときに使う関数です。
=ROUND(数値,桁数)
「数値」:四捨五入したい数値または、セルの位置を指定します。
「桁数」:四捨五入したい桁数を整数で指定します。指定した桁数のひとつ下の桁が四捨五入されます。
整数 = 整数 / 整数;
整数(intやlong)同士の割り算(/)の結果は整数になります
整数 = Fix(数値)
絶対値が小さい方向に丸めます
(例)98 = Fix(98.7)
(例)-98 = Fix(-98.7)
整数 = Int(数値)
値が小さいほうに丸めます
(例)98 = Fix(98.7)
(例)-99 = Fix(-98.7)
数値 = 整数 ¥ 整数
¥(エンマーク)での割り算は、割り算をする前に値を整数にします
3÷3.3は、3÷3としてから割り算されます
整数 = @Integer(数値)
![[言語比較]今の日時](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
ほとんどの命令はコードを実行しているコンピュータの日時を返します
import java.util.Calendar;
Calendar 日時値 = Calendar.getInstance();
日時 = New Date();
Dim 日時値 As Variant
日時値 = Now
コードを実行しているコンピュータの日時の他に、サーバーの日時を取得する方法が用意されています
日時値 = @Now
Rem {実行環境の日時を取得}
サーバーの日時値 = @Now([SERVERTIME]:[LOCALTIMEONERROR])
Rem {サーバーの日時を得られないときはクライアントの日時を取得}
#include <chrono>
time_t 経過秒 = time(nullptr);
くわしくはこちらの記事に記載しています↓
![[言語比較]Asc,Uni,String,Chr,UChr,UString : 一文字を文字コードへ、またはその反対へ](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
エラーになる例
Asc (長さがゼロの文字値)
Asc (Null値)
UString (1, -1)
UString (1, 65536)
注意
@Ascii は Asc とは異なります
@Ascii はロータスマルチバイト文字セット (LMBCS) を ASCII文字にする関数です
![[言語比較]StrCompare : 文字列を比較](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
2 = プラットフォームの並び順で比較
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
※規定は 0 ですが、規定を Option Compare で変更することができます
戻り値
-1 = 文字列1 < 文字列2 0 = 文字列1 = 文字列2 1 = 文字列1 > 文字列2
Null値 = 文字列1または文字列2がNull値
比較方法
0 = バイナリモードで比較します
1 = テキストモードで比較します
※規定は 0 です
戻り値
-1 = 文字列1 < 文字列2 0 = 文字列1 = 文字列2 1 = 文字列1 > 文字列2
Null値 = 文字列1または文字列2がNull値
比較方法
[CASESENSITIVE]/[CASEINSENSITIVE] = 大文字小文字を区別/区別しないで比較します
[ACCENTSENSITIVE]/[ACCENTINSENSITIVE] = アクセントを区別/区別しないで比較します
[PITCHSENSITIVE]/[PITCHINSENSITIVE] = 全角半角を区別/区別しないで比較します
※規定は [CASESENSITIVE] : [ACCENTSENSITIVE] : [PITCHSENSITIVE] です
※Unicodeスタンダードソートを設定しているときは使えない比較方法があります
戻り値
-1 = 文字列1 < 文字列2 0 = 文字列1 = 文字列2 1 = 文字列1 > 文字列2
![[言語比較]Boolean,True,False : 論理型](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
注意
論理型を数値に置き換えると紛らわしいです
True や False を数値に置き換えることはできますが控えたほうが無難です
等しい
=
等しくない
<>, ><
等しい
=
等しくない
<>
反転(Not, !, ~しない, ~ではない)
重ねて使うと、否定の否定って何!?って、何だかわからなくなりそうです
等しい
=
等しくない
<>, ><, !=, =!
![[言語比較]””{}|| : 文字列定数をあらわす記号](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
文字列を囲う記号を整理してみましょう。
{}(ちゅうかっこ)は””(ダブルコーテーション)に自動変換されます
![[言語比較]Rem : コメント](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
' 行末までコメント
Rem 行末までコメント
%REM
複数行コメント
注意 : %REM と %END REM は行の先頭から記載します
%END REM
' 行末までコメント
Rem 行末までコメント
REM {括弧で囲んだ範囲がコメント};
REM "括弧で囲んだ範囲がコメント";
![[言語比較]& : 文字列連結演算子](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
&(アンド)は異なる意味でも使われますので、半角空白を使わずに詰めて書くとコンパライラに誤解されることがあります
注意
& は両辺が null のときに null を返します
+ は片方が null のときに null を返します
+ は数値とあわせて使うと、数値に変換できる文字値を数値へ変換して加算することがあります
演算子ではないところで使用される&記号
変数名や値の末尾に&を付けると、Long型ですよという意味になります(接尾辞)
&B、&O、&H は、それぞれ2進数、8進数、16進数ですよという意味になります(接頭辞)
演算子として&記号を書くときは、コンピューターが困惑しないように、&の前後に空白をはさむとよいでしょう
注意
& は両辺が null のときに null を返します
演算子ではないところで使用される&記号
&O、&H は、それぞれ8進数、16進数ですよという意味になります
演算子として&記号を書くときは、コンピューターが困惑しないように、&の後に空白をはさむとよいでしょう
![[言語比較]Instr : 検索する文字列の位置を調べる](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
検索開始位置を省略したときは 1 とみなされます
数値を設定する検索開始位置や比較方法にNULL値を設定するとエラーになります
戻り値
1~ : 検索する文字の位置
0 : 見つからなかった
検索開始位置(初期値は1) : 検索される文字列が空
NULL : NULL値が設定された
評価方法
0 : 大文字小文字、全角半角を区別します
1 : 大文字小文字を区別しません
4 : 全角半角を区別しません
5 : 大文字小文字、全角半角を区別しません
検索開始位置を省略したときは 1 とみなされます
数値を設定する検索開始位置や比較方法にNULL値を設定するとエラーになります
戻り値
1~ : 検索する文字の位置
0 : 見つからなかった
検索開始位置(初期値は1) : 検索される文字列が空
NULL : NULL値が設定された
評価方法
0 : バイナリーモード
1 : テキストモード(大文字小文字を区別しません)
![[言語比較]Replace, ArrayReplace : 配列の一部を置き換える](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません
評価方法
0 : バイナリーモード
1 : テキストモード(大文字小文字を区別しません)
@Replace (元の配列; 置換前の値を含む配列; 置換後の値を含む配列)
評価方法
大文字小文字を区別します
![[言語比較]比較演算子](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
ふたつの値を比較する演算子を紹介します。
どちらかの値が Null のときは結果が Null になります
どちらかの値が Null のときは結果が Null になります
![[言語比較]ByVal : コピーした値を受け取る](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
![[言語比較]Chr (10) : 改行記号](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
注意
ノーツ/ドミノ サーバーに配置したアプリは、再コンパイルなしで複数のプラットフォームで動作します
![[言語比較]Do,While,Until : 繰り返す](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
Do ’ Exit や Goto がなれけば永遠に Do~Loop の中を繰り返します
Exit Do ’ 直近の Do から抜けることができます
Loop
Do While 式 ’ 式が True のうちは Do~Loop の中を繰り返します
Exit Do ’ 直近の Do から抜けることができます
Loop
Do Until 式 ’ 式が False のうちは Do~Loop の中を繰り返します
Exit Do ’ 直近の Do から抜けることができます
Loop
Do
Exit Do ’ 直近の Do から抜けることができます
Loop While 式 ’ 式が True のうちは Do~Loop の中を繰り返します
Do
Exit Do ’ 直近の Do から抜けることができます
Loop Until 式 ’ 式が False のうちは Do~Loop の中を繰り返します
While 式 ’ 式が True のうちは While~Wend の中を繰り返します
’ Exit を使えません
Wend
注意
@Do (式1; ...; 式最大254);
※名前は似ていますが @Do は繰り返しません
![[言語比較]Forall : 値の数だけ繰り返す](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
例:
Forall 参照変数 In 複数値
式
Exit Forall ' Forall から抜け出します
End Forall
注意
参照変数は Forall で使用する特別な変数で、Dim では宣言できません
参照変数の値を書き換えると In に続く複数値が変更されます
List : キーと値のペアで記憶する連想配列(辞書、ディクショナリー)を使います
For Each 変数名 In 複数値
式
Exit For ‘ For から抜け出します
Next
![[言語比較]Split : 区切記号で文字列を配列へ変換](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
戻り値の要素数
-1 : 指定なし。すべての区切記号で分割
0 : 戻り値に値なし。戻り値の要素数は無し
1 : 分割なし。戻り値の要素数は-1と同じ
2 : 最初の区切記号だけで2つに分割。戻り値の要素数は2つまで
3 : 最初と2つ目の区切記号だけで3つに分割。戻り値の要素数は3つまで
評価方法
0 : 大文字小文字、全角半角を区別します
1 : 大文字小文字を区別しません
4 : 全角半角を区別しません
5 : 大文字小文字、全角半角を区別しません
評価方法
0 : バイナリーモード
1 : テキストモード(大文字小文字を区別しません)
区切記号
区切記号の長さは1文字です
区切記号に「ab」を指定すると「a」と「b」が区切記号になります
戻り値にブランクを含めるか?
False : (初期値)文字列の最初や最後に区切記号がある、または区切記号が連続しているとき、戻り値にブランクが含まれないようにします
True : 戻り値からブランを取り除きません
改行を区切り記号として扱うか?
True : (初期値)改行を区切記号に含めます
False : 改行は区切記号ではありません
![[言語比較]Format : 数値を文字値へ変換](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
数値の形式の例
¥123,457 = Format (123456.789, {Currency})
123,456.79 = Format (123456.789, {Standard})
12345678.90% = Format (123456.789, {Percent})
1.23E+05 = Format (123456.789, {Scientific})
98% = Format (0.98, {#0%})
¥123,456. = Format (123456, {$#,##0.})
※桁区切記号(,)、小数点(.)、通貨記号($)はオペレーティングシステムで指定された記号に変換されます
数値の形式の例
123456.789 = @Text (123456.789);
123456.79 = @Text (123456.789, {F});
1.23E+05 = @Text (123456.789, {S});
\123456.79 = @Text (123456.789, {C});
123,456.789 = @Text (123456.789, {,});
123,45678.9 = @Text (123456.789, {%});
![[言語比較]Format : 日時値を文字値へ変換](https://www.commuply.co.jp/technic/memo/wp-content/uploads/2024/11/Rosetta_Stone_BW.jpeg)
日時の形式の例
2020/11/29 = Format (Now, {Short Date})
※オペレーティングシステムで指定された日付形式になります
14:51 = Format (Now, {Short Time})
※オペレーティングシステムで指定された時刻形式になります
2020/11/29 14:51:06 = Format (Now, {yyyy/mm/dd hh:mm:ss})
11/29 11:06 = Format (Now, {mm/dd mm:ss})
02:51:06 PM = Format (Now, {hh:mm:ss AM/PM})
※月と時はどちらもmmで指定しますが、hhのあとのmmは時と解釈されます
※スラッシュ(/)とコロン(:)はオペレーティングシステムで指定された記号に変換されます
※AM/PMと記載するとhhは01~12になり、AMまたはPMが付加されます
※am/pmと小文字で記載すると、amまたはpmが付加されます
2020/11/29 14:51:06 = Format (Now, {General Date})
日時の形式の例
2020/11/29 14:51:06 = @Text (@Now);
2020/11/29 14:51:06 = @Text (@Now; {S2});
2020/11/29 = @Text (@Now; {S0});
14:51:06 = @Text (@Now; {S1});
14:51 = @Text (@Now; {T1});