0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAユーザーのためのC#構文入門:Substringの違いとよくある混乱ポイント

Posted at

Excel VBAユーザーのためのC#構文入門:Substringの違いとよくある混乱ポイント

1. Substringの違いと注意点

VBAには Mid() 関数がありますが、C#の Substring() は構文も挙動も異なります。特に、文字列に直接メソッドとして呼び出せる点が大きな違いです。

C#の例

string s = "ABCDEF";
string part = s.Substring(1, 3); // → "BCD"
  • 第1引数は「開始位置」(0始まり)
  • 第2引数は「取得する文字数」
  • Substring(1, 3) は「2文字目から3文字分」= "BCD"
string tail = s.Substring(4); // → "EF"
  • 引数が1つの場合は、指定位置から末尾までを取得

VBAの例

Dim s As String
s = "ABCDEF"
Dim part As String
part = Mid(s, 2, 3) ' → "BCD"
  • VBAでは Mid は関数であり、開始位置は1始まり
  • 第2引数は「開始位置」、第3引数は「取得する文字数」
比較項目 VBA (Mid) C# (Substring)
呼び出し方 関数として使用 メソッドとして文字列に直接使用
開始位置 1から始まる 0から始まる
引数の意味 開始位置, 取得文字数 開始位置, 取得文字数
戻り値 String型 String型

2. よくある構文の混乱ポイント

構文 意味 よくある混乱
Substring(1, 3) 2文字目から3文字取得 VBAと開始位置の基準が異なる(VBAは1始まり)
Substring(4) 5文字目以降を取得 引数1つの場合は「末尾まで」取得される
Console.WriteLine() 出力 改行付きで表示される。Console.Write()との違いに注意
Length 文字列長の取得 Substringの範囲外アクセス防止に使うのが定番

ミニコーナー:ABC085AをC#で解いてみよう

ここまで紹介した構文を使って、AtCoderの初級問題「ABC085A」をC#で解いてみましょう。

問題概要

日付文字列 "2017/01/07" が与えられる。先頭の "2017""2018" に書き換えて出力せよ。

C#コード例

using System;

class Program
{
    static void Main()
    {
        string s = Console.ReadLine(); // 例: "2017/01/07"
        string result = "2018" + s.Substring(4);
        Console.WriteLine(result); // → "2018/01/07"
    }
}

使用されている構文の復習

  • Substring(4):5文字目以降を取得
  • Console.WriteLine():結果の出力

このように、C#では Substring を使って柔軟に文字列を操作できます。VBAユーザーにとっては、インデックスの違いに注意することで、C#の文字列処理が一気に理解しやすくなります。


このような構文の違いを一つずつ丁寧に押さえていくことで、VBAからC#への移行はぐっとスムーズになります。今後も、条件分岐やループ、配列操作など、他の構文についても比較記事を展開していく予定です。興味があればぜひフォローしてください。


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?