はじめに
機械学習の勉強を始めたVBAユーザです。
備忘録としてPython・Rの文法をVBAと比較しながらまとめていきたいと思います。
目次
文字列操作
PythonとRの文字列操作について、VBAと比較しながらまとめます。
Rのstringr
パッケージを使った文字列操作についてはこちら。
文字列の結合
Python
s1 = 'abc'
s2 = 'def'
s3 = 'ghij'
print(s1 + s2 + s3)
# abcdefghij
Pythonでは算術演算と同じ+
演算子を使います。ちなみに*
演算子は文字列の繰り返しに使います(後述)。
R
s1 <- "abc"
s2 <- "def"
s3 <- "ghij"
paste0(s1, s2, s3)
# "abcdefghij"
paste(s1, s2, s3)
# "abc def ghij"
paste(s1, s2, s3, sep="")
# "abcdefghij"
Rのpaste
関数はデフォルトでスペースが入ります。
VBA
s1 = "abc"
s2 = "def"
s3 = "ghij"
Debug.Print s1 & s2 & s3
' abcdefghij
文字列の長さ
Python
s = 'abcdefghij'
print(len(s))
# 10
R
s <- "abcdefghij"
nchar(s)
# 10
length(s)
# 1
Rのlength
関数は文字列の長さではなく、文字列ベクトルの要素数を返します。
VBA
s = "abcdefghij"
Debug.Print Len(s)
' 10
文字列の取り出し
Python
s = 'abcdefghij'
print(s[0:2])
print(s[:2])
# ab
print(s[8:10])
print(s[len(s)-2:len(s)])
print(s[-2:])
# ij
print(s[3:6])
# def
Pythonでは、文字列から部分文字列を取り出すのに、スライス表記を使います。エクセルのLEFT、RIGHTのような関数はないようです。
スライスについての説明は、公式チュートリアルのこの説明がわかりやすいです。
スライスの使い方をおぼえる良い方法は、インデックスが文字と文字の あいだ (between) を指しており、最初の文字の左端が 0 になっていると考えることです。そうすると、 n 文字からなる文字列中の最後の文字の右端はインデックス n となります。例えばこうです:
+---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
1行目の数字は文字列の 0 から 6 までのインデックスの位置を示しています; 2行目は対応する負のインデックスを示しています。i から j までのスライスは、それぞれ i と付いた境界から j と付いた境界までの全ての文字から成っています。
R
s <- "abcdefghij"
substr(s, 1, 2)
# "ab"
substring(s, 1, 2) # substrとほぼ同じ
# "ab"
substr(s, nchar(s)-2+1, nchar(s))
# "ij"
substr(s, 4, 6)
# "def"
VBA
s = "abcdefghij"
Debug.Print Left(s, 2)
' ab
Debug.Print Right(s, 2)
' ij
Debug.Print Mid(s, 4, 3)
' def
文字列の検索
Python
s = 'abcdefghij'
print(s.find('def'))
# 3
t = s + s # 'abcdefghijabcdefghij'
print(t.rfind('def'))
# 13
print(t.count('def'))
# 2
print('def' in t)
# True
print('def' not in t)
# False
R
s <- "abcdefghij"
match("def", s) #完全一致
# NA
"def" %in% s #完全一致
# FALSE
grep("def", s) #部分一致(パターンマッチ)
# 1
# これはsという文字列ベクトルの1番目の要素(いまは要素は1つしかないが)に部分一致があったということ(1文字目ということではない)
regexpr("def", s)
# [1] 4
# attr(,"match.length")
# [1] 3
# attr(,"index.type")
# [1] "chars"
# attr(,"useBytes")
# [1] TRUE
regexpr("def", s)[1]
# [1] 4
t <- paste(s, s, sep="")
t
# [1] "abcdefghijabcdefghij"
gregexpr("def", t)
# [[1]]
# [1] 4 14
# attr(,"match.length")
# [1] 3 3
# attr(,"index.type")
# [1] "chars"
# attr(,"useBytes")
# [1] TRUE
VBA
s = "abcdefghij"
Debug.Print InStr(1, s, "def")
' 4
Debug.Print InStr(1, s, "DEF")
' 0
t = s & s ' abcdefghijabcdefghij
Debug.Print InStrRev(t, "def") '後ろから検索
' 14
文字列の置換
Python
s = 'abcdefghij'
print(s.replace('def', 'DEF'))
# 'abcDEFghij'
t = s + s # 'abcdefghijabcdefghij'
print(t.replace('def', 'DEF'))
# 'abcDEFghijabcDEFghij'
R
s <- "abcdefghij"
sub("def", "DEF", s)
# "abcDEFghij"
t <- paste(s, s, sep="") # "abcdefghijabcdefghij"
sub("def", "DEF", t) # 最初の1つだけ置換
# "abcDEFghijabcdefghij"
gsub("def", "DEF", t) # すべて置換
# "abcDEFghijabcDEFghij"
VBA
s = "abcdefghij"
Debug.Print Replace(s, "def", "DEF")
' abcDEFghij
t = s & s ' abcdefghijabcdefghij
Debug.Print Replace(t, "def", "DEF")
' abcDEFghijabcDEFghij
文字列の変換
大文字と小文字の変換
Python
s = 'abcDEFghij'
print(s.upper()) # 大文字に
# ABCDEFGHIJ
print(s.lower()) # 小文字に
# abcdefghij
print(s.capitalize()) # 先頭のみ大文字・それ以外は小文字に
# Abcdefghij
print(s.swapcase()) # 大文字と小文字を入れ替え
# ABCdefGHIJ
print(s.isupper(), s.islower(), s.upper().isupper(), s.lower().islower())
# False False True True
R
s <- "abcDEFghij"
toupper(s) # 大文字に
chartr("a-z", "A-Z", s) # 大文字に
# "ABCDEFGHIJ"
tolower(s) # 小文字に
chartr("A-Z", "a-z", s) # 小文字に
# "abcdefghij"
paste0(substr(toupper(s),1,1), substr(tolower(s),2,nchar(s))) # 先頭のみ大文字・それ以外は小文字に
# "Abcdefghij"
chartr("A-Za-z", "a-zA-z", s) #大文字・小文字を入れ替え
# "ABCdefGHIJ"
s == toupper(s) #すべて大文字かどうかの判定
# FALSE
s == tolower(s) #すべて小文字かどうかの判定
# FALSE
VBA
s = "abcDEFghij"
Debug.Print UCase(s) ' 大文字に
Debug.Print StrConv(s, vbUpperCase) ' 大文字に
' ABCDEFGHIJ
Debug.Print LCase(s) ' 小文字に
Debug.Print StrConv(s, vbLowerCase) ' 小文字に
' abcdefghij
Debug.Print UCase(Left(s, 1)) & Right(LCase(s), Len(s) - 1) ' 先頭のみ大文字・それ以外は小文字に
Debug.Print StrConv(s, vbProperCase) ' 先頭のみ大文字・それ以外は小文字に
' Abcdefghij
全角と半角の変換
Python
Pythonには全角・半角を変換する組み込み関数はなさそうです。
R
s <- "abcDEFghij"
chartr("A-Za-z", "A-Za-z", s) # 半角を全角に
# "abcDEFghij"
chartr("A-Za-z", "A-Za-z", chartr("A-Za-z", "A-Za-z", s)) # 全角を半角に
# "abcDEFghij"
VBA
' Abcdefghij
s = "abcDEFghij"
Debug.Print StrConv(s, vbWide) ' 全角へ
' abcDEFghij
Debug.Print StrConv(StrConv(s, vbWide), vbNarrow) ' 半角へ
' abcDEFghij
文字列の反転
Python
s = 'abcdefghij'
print(s[::-1])
# jihgFEDcba
t = ''
for i in range(len(s)):
t = t + s[len(s)-i-1]
print(t)
Pythonでは、リストのスライス表記を使って文字列の反転ができます。
R
s <- "abcdefghij"
t <- ""
for (i in 1:nchar(s)) {
t <- paste0(t, substr(s, nchar(s)-i+1, nchar(s)-i+1))
}
t
# "jihgfedcba"
VBA
s = "abcdefghij"
Debug.Print StrReverse(s)
' jihgfedcba
VBAには文字列を反転させる関数があります。
文字列の繰り返し
Python
print('A' * 3)
# AAA
print('def' * 3)
# defdefdef
Pythonでは文字列に算術演算子*
を使って文字列を繰り返すことができます。
R
rep("A", 3)
# "A" "A" "A"
paste(rep("A", 3), collapse="")
# "AAA"
paste(rep("def", 3), collapse="")
# "defdefdef"
まず、rep("A", 3)
で"A"という文字列を要素とする長さ3の文字列ベクトルを作成します。その各要素をpaste
関数で結合しているだけです。
VBA
Debug.Print String(3, "A")
' AAA
Debug.Print String(3, "def")
' ddd
Dim i As Integer
s = ""
For i = 1 To 3
s = s & "def"
Next i
Debug.Print s
' defdefdef
String(3, "def")
は"defdefdef"とはなりません。
スペース
スペースの文字列
Python
s = ' ' * 3
print('-' + s + '-')
# - -
s = ' '*2 + 'd' + ' '*3 + 'e' + ' '*4 + 'f' + ' '*5
print('-' + s + '-')
# - d e f -
R
s <- paste(rep(" ", 3), collapse="")
paste("-", s, "-", sep="")
# "- -"
s <- paste("-",
paste(rep(" ", 2), collapse=""),
"d",
paste(rep(" ", 3), collapse=""),
"e",
paste(rep(" ", 4), collapse=""),
"f",
paste(rep(" ", 5), collapse=""),
"-",
sep="")
s
# "- d e f -"
VBA
s = Space(3)
Debug.Print "-" & s & "-"
' - -
s = Space(2) & "d" & Space(3) & "e" & Space(4) & "f" & Space(5)
Debug.Print "-" & s & "-"
' - d e f -
前後の不要なスペースの削除
Python
s = ' '*2 + 'd' + ' '*3 + 'e' + ' '*4 + 'f' + ' '*5
print(s.strip(' '))
# 'd e f'
print(s.lstrip(' '))
# 'd e f '
print(s.rstrip(' '))
# ' d e f'
R
Rにはトリム関数がないようです。
VBA
s = Space(2) & "d" & Space(3) & "e" & Space(4) & "f" & Space(5)
Debug.Print "-" & Trim(s) & "-"
' -d e f-
Debug.Print "-" & LTrim(s) & "-"
' -d e f -
Debug.Print "-" & RTrim(s) & "-"
' - d e f-
アスキーコード
最後は、文字のアスキー(ASCII)コードです。
Python
print(ord('A'), ord('Z'), ord('a'), ord('z'))
# 65 90 97 122
print(chr(65), chr(90), chr(97), chr(122))
# A Z a z
R
cat(charToRaw("A"), charToRaw("Z"), charToRaw("a"), charToRaw("z")) #16進数
# 41 5a 61 7a
cat(strtoi(charToRaw("A"), 16L), strtoi(charToRaw("Z"), 16L), strtoi(charToRaw("a"), 16L), strtoi(charToRaw("z"), 16L))
# 65 90 97 122
cat(as.raw(65), as.raw(90), as.raw(97), as.raw(122)) #16進数
# 41 5a 61 7a
cat(rawToChar(as.raw(65)), rawToChar(as.raw(90)), rawToChar(as.raw(97)), rawToChar(as.raw(122)))
# A Z a z
charToRaw("AZaz") #16進数
# 41 5a 61 7a
strtoi(charToRaw("AZaz"), 16L)
# 65 90 97 122
as.raw(c(65, 90, 97, 122)) #16進数
# 41 5a 61 7a
rawToChar(as.raw(c(65, 90, 97, 122)))
# "AZaz"
VBA
Debug.Print Asc("A"), Asc("Z"), Asc("a"), Asc("z")
' 65 90 97 122
Debug.Print Chr(65), Chr(90), Chr(97), Chr(122)
' A Z a z
まとめ
一覧
各言語で使用する文字列操作関数等を一覧にまとめます。比較のために、EXCELでの計算も示しました。
s1 = "abc"
s2 = "def"
s3 = "ghij"
s = "abcdefghij"
t = "abcdefghijabcdefghij"
u = "abcDEFghij"
v = "abcDEFghij"
w = " d e f "
とします。また、EXCELのセルにそれぞれ
A1セル:="abc"
A2セル:="def"
A3セル:="ghij"
A4セル:="abcdefghij"
A5セル:="abcdefghijabcdefghij"
A6セル:="abcDEFghij"
A7セル:="abcDEFghij"
A8セル:=" d e f "
が入力されているものとします。
文字列の基本的操作
Python | R | VBA | EXCEL | 結果 | |
---|---|---|---|---|---|
結合 | s1 + s2 + s3 | paste0(s1, s2, s3) paste(s1, s2, s3, sep="") |
s1 & s2 & s3 | =A1&A2&A3 =CONCATENATE( A1,A2,A3) |
abcdefghij |
長さ | len(s) | nchar(s) | Len(s) | =LEN(A4) | 10 |
反転 | s[::-1] | StrReverse(s) | jihgfedcba | ||
繰り返し | 'A' * 3 | String(3, "A") | =REPT("A",3) | AAA | |
繰り返し | 'def' * 3 | =REPT("def",3) | defdefdef |
文字列の取り出し
Python | R | VBA | EXCEL | 結果 | |
---|---|---|---|---|---|
左から | s[8:10] s[0:2] s[:2] |
substr(s, 1, 2) substring(s, 1, 2) |
Left(s, 2) | =LEFT(A4,2) | ab |
右から | s[len(s)-2:len(s)] s[-2:] |
substr(s, nchar(s)-2+1, nchar(s)) | Right(s, 2) | =RIGHT(A4,2) | ij |
途中 | s[3:6] | substr(s, 4, 6) | Mid(s, 4, 3) | =MID(A4,4,3) | def |
文字列の検索
Python | R | VBA | EXCEL | 結果 | |
---|---|---|---|---|---|
検索 | s.find('def') | InStr(1, s, "def") | =FIND("def",A4,1) =SEARCH("def",A4,1) |
3,4 | |
後ろからの検索 | t.rfind('def') | InStrRev(t, "def") | 13,14 | ||
カウント | t.count('def') | 2 |
文字列の置換
Python | R | VBA | EXCEL | 結果 | |
---|---|---|---|---|---|
置換 | s.replace('def', 'DEF') | sub("def", "DEF", s) | Replace(s, "def", "DEF") | =SUBSTITUTE( A4,"def","DEF") =REPLACE(A4, FIND("def",A4), LEN("def"),"DEF") |
abcDEFghij |
最初の1つだけ置換 | sub("def", "DEF", t) | abcDEFghijabcdefghij | |||
すべて置換 | t.replace('def', 'DEF') | gsub("def", "DEF", t) | Replace(t, "def", "DEF") | =SUBSTITUTE( A5,"def","DEF") |
abcDEFghijabcDEFghij |
文字列の変換
Python | R | VBA | EXCEL | 結果 | |
---|---|---|---|---|---|
大文字に | u.upper() | toupper(u) | UCase(u) | =UPPER(A6) | ABCDEFGHIJ |
小文字に | u.lower() | tolower(u) | LCase(u) | =LOWER(A6) | abcdefghij |
先頭のみ大文字・それ以外は小文字に | u.capitalize() | StrConv(u, vbProperCase) | =PROPER(A6) | Abcdefghij | |
大文字と小文字を入れ替え | u.swapcase() | chartr("A-Za-z", "a-zA-z", u) | ABCdefGHIJ | ||
大文字かどうかの判定 | u.isupper() | u == toupper(u) | False | ||
小文字かどうかの判定 | u.islower() | u == tolower(u) | False | ||
全角に | chartr("A-Za-z", "A-Za-z", u) | StrConv(u, vbWide) | =JIS(A6) | abcDEFghij | |
半角に | chartr("A-Za-z", "A-Za-z", v) | StrConv(v, vbNarrow) | =ASC(A7) | abcDEFghij |
文字列のスペース
Python | R | VBA | EXCEL | 結果 | |
---|---|---|---|---|---|
スペース | ' ' * 3 | Space(3) | =REPT(" ",3) | ||
スペース削除 | w.strip(' ') | Trim(w) | =TRIM(A8) | "d e f" | |
w.lstrip(' ') | LTrim(w) | "d e f " | |||
w.rstrip(' ') | RTrim(w) | " d e f" |
EXCELのTRIM関数は文字列の中のスペースも1つを除いて削除されてd e f
となります。
アスキーコード
Python | R | VBA | EXCEL | 結果 | |
---|---|---|---|---|---|
AのASCIIコード | ord('A') | strtoi(charToRaw("A"), 16L) | Asc("A") | =CODE("A") | 65 |
ZのASCIIコード | ord('Z') | strtoi(charToRaw("Z"), 16L) | Asc("Z") | =CODE("Z") | 90 |
aのASCIIコード | ord('a') | strtoi(charToRaw("a"), 16L) | Asc("a") | =CODE("a") | 97 |
zのASCIIコード | ord('z') | strtoi(charToRaw("z"), 16L) | Asc("z") | =CODE("a") | 122 |
ASCIIコード65の文字 | chr(65) | rawToChar(as.raw(65)) | Chr(65) | =CHAR(65) | A |
ASCIIコード90の文字 | chr(90) | rawToChar(as.raw(90)) | Chr(90) | =CHAR(90) | Z |
ASCIIコード97の文字 | chr(97) | rawToChar(as.raw(97)) | Chr(97) | =CHAR(97) | a |
ASCIIコード122の文字 | chr(122) | rawToChar(as.raw(122)) | Chr(122) | =CHAR(122) | z |
プログラム全体
参考までに使ったプログラムの全体を示します。
Python
# 文字列の結合
s1 = 'abc'
s2 = 'def'
s3 = 'ghij'
print(s1 + s2 + s3)
# abcdefghij
# 文字列の長さ
s = 'abcdefghij'
print(len(s))
# 10
# 文字列の取り出し
s = 'abcdefghij'
print(s[0:2])
print(s[:2])
# ab
print(s[8:10])
print(s[len(s)-2:len(s)])
print(s[-2:])
# ij
print(s[3:6])
# def
# 文字列の検索
s = 'abcdefghij'
print(s.find('def'))
# 3
t = s + s # 'abcdefghijabcdefghij'
print(t.rfind('def'))
# 13
print(t.count('def'))
# 2
print('def' in t)
# True
print('def' not in t)
# False
# 文字列の置き換え
s = 'abcdefghij'
print(s.replace('def', 'DEF'))
# 'abcDEFghij'
t = s + s # 'abcdefghijabcdefghij'
print(t.replace('def', 'DEF'))
# 'abcDEFghijabcDEFghij'
# 文字列の大文字・小文字の変換
s = 'abcDEFghij'
print(s.upper()) # 大文字に
# ABCDEFGHIJ
print(s.lower()) # 小文字に
# abcdefghij
print(s.capitalize()) # 先頭のみ大文字・それ以外は小文字に
# Abcdefghij
print(s.swapcase()) # 大文字と小文字を入れ替え
# ABCdefGHIJ
print(s.isupper(), s.islower(), s.upper().isupper(), s.lower().islower())
# False False True True
# 文字列の全角・半角の変換
# 全角・半角の変換の組み込み関数はなさそう
# 文字列の反転
s = 'abcdefghij'
print(s[::-1])
# jihgFEDcba
t = ''
for i in range(len(s)):
t = t + s[len(s)-i-1]
print(t)
# 文字列の繰り返し
print('A' * 3)
# AAA
print('def' * 3)
# defdefdef
# 文字列のスペース
s = ' ' * 3
print('-' + s + '-')
# - -
s = ' '*2 + 'd' + ' '*3 + 'e' + ' '*4 + 'f' + ' '*5
print('-' + s + '-')
# - d e f -
# 文字列の前後のスペース削除
s = ' '*2 + 'd' + ' '*3 + 'e' + ' '*4 + 'f' + ' '*5
print(s.strip(' '))
# 'd e f'
print(s.lstrip(' '))
# 'd e f '
print(s.rstrip(' '))
# ' d e f'
# アスキー(ASCII)コード
print(ord('A'), ord('Z'), ord('a'), ord('z'))
# 65 90 97 122
print(chr(65), chr(90), chr(97), chr(122))
# A Z a z
R
# 文字列の結合
s1 <- "abc"
s2 <- "def"
s3 <- "ghij"
paste0(s1, s2, s3)
# "abcdefghij"
paste(s1, s2, s3)
# "abc def ghij"
paste(s1, s2, s3, sep="")
# "abcdefghij"
# paste関数はデフォルトでスペースが入る
# 文字列の長さ
s <- "abcdefghij"
nchar(s)
# 10
length(s)
# 1
# length関数は文字列の長さではなく、文字列ベクトルの要素数を返す
# 文字列の取り出し
s <- "abcdefghij"
substr(s, 1, 2)
# "ab"
substring(s, 1, 2) # substrとほぼ同じ
# "ab"
substr(s, nchar(s)-2+1, nchar(s))
# "ij"
substr(s, 4, 6)
# "def"
# 文字列の検索
s <- "abcdefghij"
match("def", s) #完全一致
# NA
"def" %in% s #完全一致
# FALSE
grep("def", s) #部分一致(パターンマッチ)
# 1
# これはsという文字列ベクトルの1番目の要素(いまは要素は1つしかないが)に部分一致があったということ(1文字目ということではない)
regexpr("def", s)
# [1] 4
# attr(,"match.length")
# [1] 3
# attr(,"index.type")
# [1] "chars"
# attr(,"useBytes")
# [1] TRUE
regexpr("def", s)[1]
# [1] 4
t <- paste(s, s, sep="")
t
# [1] "abcdefghijabcdefghij"
gregexpr("def", t)
# [[1]]
# [1] 4 14
# attr(,"match.length")
# [1] 3 3
# attr(,"index.type")
# [1] "chars"
# attr(,"useBytes")
# [1] TRUE
# 文字列の置き換え
s <- "abcdefghij"
sub("def", "DEF", s)
# "abcDEFghij"
t <- paste(s, s, sep="") # "abcdefghijabcdefghij"
sub("def", "DEF", t) # 最初の1つだけ置換
# "abcDEFghijabcdefghij"
gsub("def", "DEF", t) # すべて置換
# "abcDEFghijabcDEFghij"
# 文字列の大文字・小文字の変換
s <- "abcDEFghij"
toupper(s) # 大文字に
chartr("a-z", "A-Z", s) # 大文字に
# "ABCDEFGHIJ"
tolower(s) # 小文字に
chartr("A-Z", "a-z", s) # 小文字に
# "abcdefghij"
paste0(substr(toupper(s),1,1), substr(tolower(s),2,nchar(s))) # 先頭のみ大文字・それ以外は小文字に
# "Abcdefghij"
chartr("A-Za-z", "a-zA-z", s) #大文字・小文字を入れ替え
# "ABCdefGHIJ"
s == toupper(s) #すべて大文字かどうかの判定
# FALSE
s == tolower(s) #すべて小文字かどうかの判定
# FALSE
# 文字列の全角・半角の変換
s <- "abcDEFghij"
chartr("A-Za-z", "A-Za-z", s) # 半角を全角に
# "abcDEFghij"
chartr("A-Za-z", "A-Za-z", chartr("A-Za-z", "A-Za-z", s)) # 全角を半角に
# "abcDEFghij"
# 文字列の反転
s <- "abcdefghij"
t <- ""
for (i in 1:nchar(s)) {
t <- paste0(t, substr(s, nchar(s)-i+1, nchar(s)-i+1))
}
t
# "jihgfedcba"
# 文字列の繰り返し
rep("A", 3)
# "A" "A" "A"
paste(rep("A", 3), collapse="")
# "AAA"
paste(rep("def", 3), collapse="")
# "defdefdef"
# 文字列のスペース
s <- paste(rep(" ", 3), collapse="")
paste("-", s, "-", sep="")
# "- -"
s <- paste("-",
paste(rep(" ", 2), collapse=""),
"d",
paste(rep(" ", 3), collapse=""),
"e",
paste(rep(" ", 4), collapse=""),
"f",
paste(rep(" ", 5), collapse=""),
"-",
sep="")
s
# "- d e f -"
# 文字列の前後のスペース削除
# トリム関数はなさそう
# アスキー(ASCII)コード
cat(charToRaw("A"), charToRaw("Z"), charToRaw("a"), charToRaw("z")) #16進数
# 41 5a 61 7a
cat(strtoi(charToRaw("A"), 16L), strtoi(charToRaw("Z"), 16L), strtoi(charToRaw("a"), 16L), strtoi(charToRaw("z"), 16L))
# 65 90 97 122
cat(as.raw(65), as.raw(90), as.raw(97), as.raw(122)) #16進数
# 41 5a 61 7a
cat(rawToChar(as.raw(65)), rawToChar(as.raw(90)), rawToChar(as.raw(97)), rawToChar(as.raw(122)))
# A Z a z
charToRaw("AZaz") #16進数
# 41 5a 61 7a
strtoi(charToRaw("AZaz"), 16L)
# 65 90 97 122
as.raw(c(65, 90, 97, 122)) #16進数
# 41 5a 61 7a
rawToChar(as.raw(c(65, 90, 97, 122)))
# "AZaz"
VBA
Sub test_string()
Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim s As String
Dim t As String
' 文字列の結合
s1 = "abc"
s2 = "def"
s3 = "ghij"
Debug.Print s1 & s2 & s3
' abcdefghij
' 文字列の長さ
s = "abcdefghij"
Debug.Print Len(s)
' 10
' 文字列の取り出し
s = "abcdefghij"
Debug.Print Left(s, 2)
' ab
Debug.Print Right(s, 2)
' ij
Debug.Print Mid(s, 4, 3)
' def
' 文字列の検索
s = "abcdefghij"
Debug.Print InStr(1, s, "def")
' 4
Debug.Print InStr(1, s, "DEF")
' 0
t = s & s ' abcdefghijabcdefghij
Debug.Print InStrRev(t, "def") '後ろから検索
' 14
' 文字列の置き換え
s = "abcdefghij"
Debug.Print Replace(s, "def", "DEF")
' abcDEFghij
t = s & s ' abcdefghijabcdefghij
Debug.Print Replace(t, "def", "DEF")
' abcDEFghijabcDEFghij
' 文字列の大文字・小文字の変換
s = "abcDEFghij"
Debug.Print UCase(s) ' 大文字に
Debug.Print StrConv(s, vbUpperCase) ' 大文字に
' ABCDEFGHIJ
Debug.Print LCase(s) ' 小文字に
Debug.Print StrConv(s, vbLowerCase) ' 小文字に
' abcdefghij
Debug.Print UCase(Left(s, 1)) & Right(LCase(s), Len(s) - 1) ' 先頭のみ大文字・それ以外は小文字に
Debug.Print StrConv(s, vbProperCase) ' 先頭のみ大文字・それ以外は小文字に
' Abcdefghij
' 文字列の全角・半角の変換
' Abcdefghij
s = "abcDEFghij"
Debug.Print StrConv(s, vbWide) ' 全角へ
' abcDEFghij
Debug.Print StrConv(StrConv(s, vbWide), vbNarrow) ' 半角へ
' abcDEFghij
' 文字列の反転
s = "abcdefghij"
Debug.Print StrReverse(s)
' jihgfedcba
' 文字列の繰り返し
Debug.Print String(3, "A")
' AAA
Debug.Print String(3, "def")
' ddd
Dim i As Integer
s = ""
For i = 1 To 3
s = s & "def"
Next i
Debug.Print s
' defdefdef
' 文字列のスペース
s = Space(3)
Debug.Print "-" & s & "-"
' - -
s = Space(2) & "d" & Space(3) & "e" & Space(4) & "f" & Space(5)
Debug.Print "-" & s & "-"
' - d e f -
' 文字列の前後のスペース削除
s = Space(2) & "d" & Space(3) & "e" & Space(4) & "f" & Space(5)
Debug.Print "-" & Trim(s) & "-"
' -d e f-
Debug.Print "-" & LTrim(s) & "-"
' -d e f -
Debug.Print "-" & RTrim(s) & "-"
' - d e f-
' アスキー(ASCII)コード
Debug.Print Asc("A"), Asc("Z"), Asc("a"), Asc("z")
' 65 90 97 122
Debug.Print Chr(65), Chr(90), Chr(97), Chr(122)
' A Z a z
End Sub