本サイトはプロモーションが含まれています

【情報Ⅰ】DNCL2とPython・VBA・JavaScriptの比較・対応まとめ

導入

2022年4月から「情報Ⅰ」が必修となり、2025年からは大学入学共通テスト(共テ)で出題されます。


大学入学共通テストでは、「DNCL2(DNCL)」という大学入学共通テスト専用の擬似プログラミング言語が使われますが、これは情報Ⅰの教科書で使われている一般的な言語とは異なります。


そこで、今回の記事では、DNCL2と教科書で使われている言語(Python・VBA・JavaScript)の比較・対応をまとめました。
勉強するうえで、わからなくなった時にぜひ使ってください。


※注意
この記事でのDNCL2の記述方法については、令和7年度試作問題の概要「情報」の18ページから24ページの表記例を参考にしています。
記述方法についてはまだ確定していないので、最新の記述方法に関する情報は大学入試センターのサイトをご確認ください。


DNCL2とは

DNCL2とは、共通テスト用プログラム表記の通称で、大学入学共通テストの情報Ⅰの問題に使われる擬似プログラミング言語です


受験生が使用していた言語によって有利不利が生まれないように、大学入学共通テスト専用に作られた擬似言語です。
書き方は、Pythonに非常に近いです
ですが、プログラミング言語は書き方が違うだけで、基本的に同じ考え方なので、他の言語がわかっていればそこまで苦労しないと思います。

コードの例

コードは以下のように書きます。
以下の例は、1から10の数字をすべて足した合計の数を求めるプログラムです。

gokei = 0
i を 1 から 10 まで 1 ずつ増やしながら繰り返す:
gokei = gokei + i
表示する(gokei)

おそらくプログラミングをやったことがあるのであれば、上記のどの表現が、自分の使っているプログラミング言語のどの表現に当たるのか、大まかに推測できるのではないでしょうか。


例えば、以下の部分はfor文に当たります。

i を 1 から 10 まで 1 ずつ増やしながら繰り返す:
gokei = gokei + i

また、プログラミングをやったことがない方でも、どこで何をやっているか大まかに予想がつくのがポイントです。

実行環境

DNCL2は公式の実行環境は用意されていませんが、有名なのはなでしこのサイトのエディタです。
このサイトはプログラムの最初の行に!DNCL2と入れると、DNCL2をブラウザ上で簡単に実行できます。
https://nadesi.com/v3/doc/index.php?%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFv2


例えば、先ほど紹介したプログラムだと以下のように書きます。

!DNCL2
gokei = 0
i を 1 から 10 まで 1 ずつ増やしながら繰り返す:
gokei = gokei + i
表示する(gokei)

また、DNCL2はPythonに非常に似ているので、今後のことを考えてPythonを学ぶのもありです。
Pythonの実行環境として、Googleアカウントでログインするだけで使えるGoogle Colaboratoryというものがあるので、これを使ってPythonを動かすと理解の助けになるかもしれません。


DNCL2とPython・VBA・JavaScriptの比較・対応

それでは本題のDNCL2と教科書で使われている言語(Python・VBA・JavaScript)の比較・対応を順に紹介していきます。
目次を作り、リンクで飛べるようにしたので、必要な部分だけ確認してみてください。


言語別の特徴としては、VBAは教科書で使われている言語の3つの中では比較的古い書き方なので、記述量が多くなるのが特徴です。
ただ、プログラミングをする上での考え方は同じなので、そこまで困らないと思います。

コメント

まずコメントについてですが、DNCL2はPythonと同じく「#」を使ってコメントをつけることができます
コメントとはプログラムで実行されない、メモ書きの部分です。

DNCL2

# この部分はコメントです

Python

# この部分はコメントです

VBA

' この部分はコメントです

JavaScript

// この部分はコメントです

変数と代入

変数と代入については、DNCL2の場合、変数名は日本語のローマ字を使うのが大きな違いです
また、「(配列の変数名)のすべての値を~にする」と書くことで、配列のすべての値を同じ値に初期化できます。

DNCL2

hensu = 3 # 数字
moji = "ABC" # 文字
Hairetsu = [1, 2, 3, 4, 5] # 配列 (配列の変数の先頭は大文字)
Hairetsu のすべての値を 0 にする # 配列をすべて同じ値で初期化する場合
Hairetsu[2] = 3 # 配列の一部要素のみを変更する場合

Python

x = 3 # 数字
s = "ABC" # 文字
arr = [1, 2, 3, 4, 5] # 配列(リスト)
arr = [0] * 5 # 配列(リスト)をすべて同じ値で初期化する場合
arr[2] = 3 # 配列(リスト)の一部要素のみを変更する場合

VBA

Dim x As Integer
x = 3 ' 数字
Dim s As String
s = "ABC" ' 文字
Dim arr(5) As Variant
arr = Array(1, 2, 3, 4, 5) ' 配列
ReDim arr(5) As Variant
arr = Array(0, 0, 0, 0, 0) ' 配列をすべて同じ値(0)で初期化する場合
arr(2) = 3 ' 配列の一部要素のみを変更する場合

JavaScript

const x = 3; // 数字
const s = "ABC"; // 文字
const arr = [1, 2, 3, 4, 5]; // 配列
arr.fill(0); // 配列をすべて同じ値で初期化する場合
arr[2] = 3; // 配列の一部要素のみを変更する場合

表示文

DNCL2で、値を表示する場合は「表示する(表示したい値)」」、文字列の連結をする場合はカンマ区切りで書きます
他の言語は、一般的にprintconsole.logなどを使います。


ちなみに大学入試センターが公開した記述例では、VBAはDebug.Printの代わりにMsgBox、JavaScriptはconsole.logの代わりにdocument.writeを使っています
ですが、MsgBoxはメッセージボックスなのでPythonのprintとは役割が厳密には異なります。
また、document.writeは強く非推奨とされており、実際のプログラミングではほとんど使いません。


ただ、教科書にはこのように書かれている場合が多いので、その場合はそちらを使ってください。

DNCL2

表示する("終了しました") # 「終了しました」と表示される
表示する("合計は",hensu,"です") # hensuが3の時「合計は3です」と表示される
表示する("sum=",hensu,", i=",i) # hensuが3、iが1の時、「sum=3, i=1」と表示される

Python

print("終了しました") # 「終了しました」と表示される
print("合計は",x,"です") # xが3の時「合計は3です」と表示される
print("sum=",x,", i=",i) # xが3、iが1の時、「sum=3, i=1」と表示される

VBA

・Debug.Printを使う場合(一般的)

Debug.Print "終了しました" ' 「終了しました」と表示される
Debug.Print "合計は" & x & "です" ' xが3の時「合計は3です」と表示される
Debug.Print "sum=" & x & ", i=" & i ' xが3、iが1の時、「sum=3, i=1」と表示される

・MsgBoxを使う場合(教科書)

MsgBox "終了しました" ' 「終了しました」と表示される
MsgBox "合計は" & x & "です" ' xが3の時「合計は3です」と表示される
MsgBox "sum=" & x & ", i=" & i ' xが3、iが1の時、「sum=3, i=1」と表示される

JavaScript

・console.logを使う場合(一般的)

console.log("終了しました"); // 「終了しました」と表示される
console.log("合計は",x,"です"); // xが3の時「合計は3です」と表示される
console.log("sum=",x,", i=",i); // xが3、iが1の時、「sum=3, i=1」と表示される

・document.writeを使う場合(教科書)

document.write("終了しました"); // 「終了しました」と表示される
document.write("合計は",x,"です"); // xが3の時「合計は3です」と表示される
document.write("sum=",x,", i=",i); // xが3、iが1の時、「sum=3, i=1」と表示される

四則演算(足し算・引き算・掛け算・割り算・商・余り)

四則演算は、DNCL2では割り算の商に「÷」を使うのが大きな違いです
後は基本的に、他の言語と同じです。

DNCL2

tasu = 3 + 2 # 足し算
hiku = 3 - 2 # 引き算
kakeru = 3 * 2 # 掛け算
waru = 3 / 2 # 割り算、この場合waruは1.5になる
syo = 3 ÷ 2 # 割り算の商、この場合syoは1になる
amari = 3 % 2 # 割り算の余り、この場合amariは1になる
beki = 3 ** 2 # べき乗(累乗)
heikin = (a + b + c) / 3 # カッコがある場合、カッコ内を優先する

Python

add = 3 + 2 # 足し算
subt = 3 - 2 # 引き算
mul = 3 * 2 # 掛け算
div = 3 / 2 # 割り算
quo = 3 // 2 # 割り算の商
rema = 3 % 2 # 割り算の余り
expo = 3 ** 2 # べき乗(累乗)
ave = (a + b + c) / 3 # カッコがある場合、カッコ内を優先する

VBA

Dim add As Integer
add = 3 + 2 ' 足し算
Dim subt As Integer
subt = 3 - 2 ' 引き算
Dim mul As Integer
mul = 3 * 2 ' 掛け算
Dim div As Double
div = 3 / 2 ' 割り算
Dim quo As Integer
quo = 3 \ 2 ' 割り算の商
Dim rema As Integer
rema = 3 Mod 2 ' 割り算の余り
Dim expo As Integer
expo = 3 ^ 2 ' べき乗(累乗)
Dim ave As Double
ave = (a + b + c) / 3 ' カッコがある場合、カッコ内を優先する

JavaScript

const add = 3 + 2; // 足し算
const subt = 3 - 2; // 引き算
const mul = 3 * 2; // 掛け算
const div = 3 / 2; // 割り算
const quo = Math.floor(3 / 2); // 割り算の商
const rema = 3 % 2; // 割り算の余り
const expo = 3 ** 2 // べき乗(累乗)
const ave = (a + b + c) / 3; // カッコがある場合、カッコ内を優先する

比較演算(=, ≠, >, <)

比較演算については、他の言語と大きな違いはありません。

DNCL2

x > 3
y * 2 <= 8 # y × 2 ≦ 8という意味
"あいうえお" == "あいうえお" # 等しい(=)
"ABC" != "abc" # 等しくない(≠)

Python

x > 3
y * 2 <= 8
"あいうえお" == "あいうえお"
"ABC" != "abc"

VBA

x > 3
y * 2 <= 8
"あいうえお" = "あいうえお"
"ABC" <> "abc"

JavaScript

x > 3
y * 2 <= 8
"あいうえお" === "あいうえお"
"ABC" !== "abc"

論理演算(かつ、または、でない)

論理演算については、DNCL2はPythonと同じく「and」「or」「not」を使います

DNCL2

x >= 3 and x <= 8
y % 2 == 0 or y < 1
not z > 12
not (z > 5 and z < 12)
z > 5 and (not z < 12)

Python

x >= 3 and x <= 8
y % 2 == 0 or y < 1
not z > 12
not (z > 5 and z < 12)
z > 5 and (not z < 12)

VBA

x >= 3 And x <= 8
y Mod 2 = 0 Or y < 1
Not z > 12
Not (z > 5 And z < 12)
z > 5 And (Not z < 12)

JavaScript

x >= 3 && x <= 8
y % 2 === 0 || y < 1
!(z > 12)
!(z > 5 && z < 12)
z > 5 && !(z < 12)

条件分岐(if文)

DNCL2では、if文は決まった形の日本語で記述します。

DNCL2

もし x < 3 ならば:
x = x - 3
そうでなくもし y > 2 ならば:
y = y + 2
そうでなければ:
x = x / y
y = y + 1

Python

if x < 3:
x -= 3
elif y > 2:
y += 2
else:
x /= y
y += 1

VBA

If x < 3 Then
x = x - 3
ElseIf y > 2 Then
y = y + 2
Else
x = x / y
y = y + 1
End If

JavaScript

if (x < 3) {
x -= 3;
} else if (y > 2) {
y += 2;
} else {
x /= y;
y++;
}

繰り返し(for文)

for文もDNCL2は決まった日本語で記述します。

DNCL2

i を 1 から 10 まで 1 ずつ増やしながら繰り返す:
gokei = gokei + i

Python

for i in range(1, 11):
sum += i

VBA

For i = 1 To 10
sum = sum + i
Next i

JavaScript

for (let i=1; i<=10; i++) {
sum += i;
}

繰り返し(while文)

while文もDNCL2は同様に決まった日本語で記述します。

DNCL2

n <= 3 の間繰り返す:
gokei = gokei + n
n = n + 1

Python

while n <= 3:
sum += n
n += 1

VBA

While n <= 3
sum = sum + n
n = n + 1
Wend

JavaScript

while(n <= 3) {
sum += n;
n++;
}

外部入力

DNCL2では、外部入力は「【外部からの入力】」と表します。

DNCL2

表示する("好きな言葉を入力してください")
nyuryoku = 【外部からの入力】

Python

message = input("好きな言葉を入力してください")

VBA

Dim message As String
message = InputBox("好きな言葉を入力してください")

JavaScript

const message = prompt("好きな言葉を入力してください");

関数の定義と呼び出し

DNCL2では、関数の定義は問題文中にあるのが大きな違いです
きちんと例もあるようなので、それを確認すれば意味がわかると思います。

DNCL2

# 問題文中に関数の記述がある
和を返す(始めの数, 終わりの数)・・・引数として「始めの数」と「終わりの数」が与えられ,
「始めの数」以上「終わりの数」以下の値の和を返す関数。
例:「始めの数」が1, 「終わりの数」が5の場合, 1+2+3+4+5となるので, 和を返す(1, 5) の値は15となる。
z = 和を返す(1, 10)

Python

def returnSum (s, e):
sum = (s+e) * (e-s+1) / 2
return sum
z = returnSum(1, 10)

VBA

Function ReturnSum (s As Integer, e As Integer)
sum = (s+e) * (e-s+1) / 2
ReturnSum = sum
End Function
z = ReturnSum(1, 10)

JavaScript

function returnSum (s, e) {
const sum = (s+e) * (e-s+1) / 2;
return sum;
}
const z = returnSum(1, 10);

まとめ

今回の記事では、大学入学共通テストの情報Ⅰで使われる擬似プログラミング言語DNCL2を教科書で使っているPython、VBA、JavaScriptと比較しました。


基本的には書き方の違いだけですが、もしわからなくなった時のためにこのページをブックマークして、ぜひ使用してください!