『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

Accessのフィールド結合について

Access2002を使用していますが、
「姓」と「名」というフィールドがあります。
クエリにて、「姓」と「名」を結合することは出来ますか?
「姓」と「名」の間にスペースも1つ入れたいです。

例えば下記のような場合
「姓」:田中
「名」:一郎

↓↓↓↓↓↓↓

仮に「名前」という演算フィールドを作ったとして、
「名前」:田中 一郎

といったようにするにはどうすればよろしいでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

クエリのデザインビューで、左端に『フィールド』と表示された欄があると思いますが、


そこに式を指定すればOkです。

具体的には、

「名前: [テーブル名].[姓] & " " & [テーブル名].[名]」
(1つのテーブルのみなら、「名前: [姓] & " " & [名]」でもOk)

といった形になります。
(先頭の「名前:」で指定した「:」の左側が、フィールド名になります)

※Excelと違い、「&」の前後には半角スペースが必須です。念のため。
※間に入れるスペースには、Space関数も使用可能です。
 (「名前: [姓] & Space(1) & [名]」)
「Accessのフィールド結合について」の回答画像1
    • good
    • 0
この回答へのお礼

とても分かりやすいご説明をいただきまして誠にありがとうございます。
大変参考になり、イメージ通りの形になりました。
ありがとうございました。

お礼日時:2010/10/20 19:58

基本的な、文字列を結合する演算子「&」が使える。

常識的なこと。
参考 http://office.microsoft.com/ja-jp/access-help/HA …
クエリのデザインビューで
式1: [姓] & " " & [名]
    • good
    • 0
この回答へのお礼

イメージ通りの形になりました。
誠にありがとうございました。

お礼日時:2010/10/20 20:00

名前:[姓] & " " & [名]

    • good
    • 0
この回答へのお礼

イメージ通りの形になりました。
誠にありがとうございました。

お礼日時:2010/10/20 19:59

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Qaccess 複数フィールドを1フィールドに

Access勉強中です。

委員名簿テーブルと、いくつかの行事テーブルを結合したいのですが、上手くいきません。
どうか教えてください。
access2003です。

委員名簿テーブル
 クラス   生徒名1   生徒名2   生徒名3
 1-1     ああ     いい   
 1-2     かか     きき      くく
 1-3     ささ
 1-4     たた     ちち      つつ

行事Aテーブル          行事Bテーブル
 生徒名   参加          生徒名    参加
  かか    true           ああ     false     
  ささ     true           いい     true         
  ちち    false           きき     true
                      たた     true
                      ちち     true

 このようなテーブルを結合して、次のようなテーブルを作りたいのです。

 クラス  生徒名   行事A    行事B
 1-1   ああ            false
 1-1   いい            true
 1-2   かか    true
 1-2   きき            true
 1-2   くく
 1-3   ささ     true
 1-4   たた            true
 1-4   ちち    false     true
 1-5   つつ

よろしくお願いします。

Access勉強中です。

委員名簿テーブルと、いくつかの行事テーブルを結合したいのですが、上手くいきません。
どうか教えてください。
access2003です。

委員名簿テーブル
 クラス   生徒名1   生徒名2   生徒名3
 1-1     ああ     いい   
 1-2     かか     きき      くく
 1-3     ささ
 1-4     たた     ちち      つつ

行事Aテーブル          行事Bテーブル
 生徒名   参加         ...続きを読む

Aベストアンサー

一応、質問の範囲での回答とします。

たとえば、以下のような「委員会名簿テーブル」があるとします。
フィールドの生徒名は生徒名6でも、生徒名100でもフィールドが
設定できるまでかまいません。

クラス 生徒名1 生徒名2 生徒名3 生徒名4 生徒名5
1-1   田中  佐藤   西田  山崎   内藤
1-2   東   南田   中川
1-3   豊臣  田中   中田  今井
1-4   谷   道上
1-5   徳川  佐竹   佐藤  西岡   中川


これを以下のようなテーブルに簡単に変更できますか?
また、下記では質問の最終的な結果を得るには下記の
ように「生徒ID」という各生徒を一意に区別するフィールドが
必要になります。これは最後に作るクエリで必要であるということと、
同じクラスあるいは他のクラスに同じ苗字の人物が存在する可能性が
あるかもしれないからです。


生徒ID クラス 生徒名
1        1-1  佐藤
2        1-1  西田
3        1-1  山崎
4        1-1  内藤
5        1-2  南田
6        1-2  中川
7        1-3田中
8        1-3  中田
9        1-3  今井
10        1-4  道上
11        1-5  佐竹
12        1-5  佐藤
13        1-5  西岡
14        1-5  中川


もし、データが多くて大変だというのであれば、以下のようにしてみてください。

(1) 以下のようなテーブルを作ります。
生徒ID  数値型  主キーを設定します。
クラス  テキスト型
生徒名  テキスト型

テーブルの名前を「委員会名簿テーブル」とします。
元の「委員名簿テーブル」を「委員会名簿テーブル元」
とします。

(2) 次に分かりやすく実行できるようにするために、
フォームを作り、そこにボタンを一つ設定します。
ボタンのクリック時のイベントに以下を設定します。
なお、ボタンの名前は出来上がったボタンの名前の
ままでいいです。

Private Sub コマンド0_Click()
Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim i As Integer
Dim j As Long

Set db = CurrentDb
Set rs1 = db.OpenRecordset("委員会名簿テーブル元")
Set rs2 = db.OpenRecordset("委員会名簿テーブル", dbOpenDynaset)

j = 1
rs1.MoveFirst
Do Until rs1.EOF
For i = 2 To rs1.Fields.Count - 1
If rs1.Fields(i) <> "" Then
rs2.AddNew
rs2!生徒ID = j
rs2!クラス = rs1!クラス
rs2!生徒名 = rs1.Fields(i).Value
rs2.Update
j = j + 1
End If
Next i
rs1.MoveNext
Loop

rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
db.Close: Set db = Nothing
End Sub

次に、コード表のコマンドバーのツールから
参照設定を選択し、Microsoft DAO xx Object Library の項目に
チェックを入れ、OKとします。なお、xx は3.6のような数字です。

(3) (1)、(2)ができたら、ボタンを押して「委員会名簿テーブル」
を確認してみてください。


(4) 次に、「行事Aテーブル」と「行事Bテーブル」
数値型の「生徒ID」というフィールドを追加し、できた「委員会名簿テーブル」
を参照して「クラス」と「生徒名」に合致した「生徒」を入れていってください。
本来は「生徒ID」があれば「生徒名」はこれらのテーブルでは必要はないのですが。
これらのテーブルの「生徒ID」は主キーを設定しません。


たとえば以下のように。

行事Aテーブル
生徒ID 生徒名 参加
1   佐藤    True
3   山崎    True
6   中川    True

行事Bテーブル
生徒ID 生徒名 参加
1    佐藤   False
6    中川   True
13    佐藤   True
14    中川   True


(5) 最後にクエリを作成します。下記のSQL文を新しいクエリを
SQLビューにして、貼り付けます。

SELECT 委員会名簿テーブル.生徒ID, 委員会名簿テーブル.クラス, 委員会名簿テーブル.生徒名, 行事Aテーブル.参加, 行事Bテーブル.参加
FROM (委員会名簿テーブル LEFT JOIN 行事Aテーブル ON 委員会名簿テーブル.生徒ID = 行事Aテーブル.生徒ID) LEFT JOIN 行事Bテーブル ON 委員会名簿テーブル.生徒ID = 行事Bテーブル.生徒ID;


あるいは、以下のようにしてもいいですが、こちらはフィールド名を変更しています。
変更は手動で書き変える必要があります。

SELECT 委員会名簿テーブル.生徒ID, 委員会名簿テーブル.クラス, 委員会名簿テーブル.生徒名, 行事Aテーブル.参加, 行事Bテーブル.参加
FROM (委員会名簿テーブル LEFT JOIN 行事Aテーブル ON 委員会名簿テーブル.生徒ID = 行事Aテーブル.生徒ID) LEFT JOIN 行事Bテーブル ON 委員会名簿テーブル.生徒ID = 行事Bテーブル.生徒ID;

上記のクエリをデザインビューで確認すると、「委員会名簿テーブル」
から「行事Aテーブル」と「行事Bテーブル」に結合線が向かっている
ことに注目してください。行事テーブルが追加されるような場合は
結合線の設定を同じようにしてください。

以上です。
わからないところがあれば補足してください。

一応、質問の範囲での回答とします。

たとえば、以下のような「委員会名簿テーブル」があるとします。
フィールドの生徒名は生徒名6でも、生徒名100でもフィールドが
設定できるまでかまいません。

クラス 生徒名1 生徒名2 生徒名3 生徒名4 生徒名5
1-1   田中  佐藤   西田  山崎   内藤
1-2   東   南田   中川
1-3   豊臣  田中   中田  今井
1-4   谷   道上
1-5   徳川  佐竹   佐藤  西岡   中川


これを以下のようなテーブルに簡単に変更でき...続きを読む

QAccessのクエリで2つのフィールドが同条件の場合に結合したい

Accessのクエリで2つのフィールドが同条件の場合に結合したい

以下のようなテーブルが2つあって、その2つのフィールドが一致する場合につなげるクエリを作りたいと考えています。

【テーブル名:勤怠データ】
氏名│日付│出勤時刻
──────────────────
鈴木│2/1│8:01
鈴木│2/2│8:02
鈴木│2/3│8:03
高橋│2/1│9:01
高橋│2/2│9:02
高橋│2/3│9:03

【テーブル名:シフト】
氏名│日付│シフト
──────────────────
鈴木│2/1│A
鈴木│2/2│B
鈴木│2/3│A
高橋│2/1│B
高橋│2/2│C
高橋│2/3│B

【クエリ:シフト勤怠データ】←作りたいもの
氏名│日付│シフト│出勤時刻
──────────────────
鈴木│2/1│A│8:01
鈴木│2/2│B│8:02
鈴木│2/3│A│8:03
高橋│2/1│B│9:01
高橋│2/2│C│9:02
高橋│2/3│B│9:03

氏名と日付のフィールドが一致するときに結合させたいのですが、
デザイン画面でつなげればいいのかわかりません。
ご回答よろしくお願い致します。

Accessのクエリで2つのフィールドが同条件の場合に結合したい

以下のようなテーブルが2つあって、その2つのフィールドが一致する場合につなげるクエリを作りたいと考えています。

【テーブル名:勤怠データ】
氏名│日付│出勤時刻
──────────────────
鈴木│2/1│8:01
鈴木│2/2│8:02
鈴木│2/3│8:03
高橋│2/1│9:01
高橋│2/2│9:02
高橋│2/3│9:03

【テーブル名:シフト】
氏名│日付│シフト
──────────────────
鈴木│2/1│A
鈴木│2/2│B
鈴木│2/3│A
高橋│2/1│B
高橋│2/2│C
高橋│2/3│B

【クエリ:シフト...続きを読む

Aベストアンサー

クエリをデザインで作成する時、テーブル「勤怠データ」「シフト」を表示しておきます。

テーブル「勤怠データ」上の「氏名」をドラッグして、テーブル「シフト」の「氏名」にドロップします。
すると、「氏名」「氏名」に線が表示されます。
「日付」も同様にドラッグ&ドロップして線を表示させます。

その後、
以下の順番でダブルクリックしていきます。
「勤怠データ」上の「氏名」
「勤怠データ」上の「日付」
「シフト」上の「シフト」
「勤怠データ」上の「出勤時刻」

終わったら、データシート表示にしてみます。

良かったら、「シフト勤怠データ」名で保存します。


の手順で良かったような気がします。

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QAccessのクエリで、Left関数を使用して、7桁の数値を抜き出す方

Accessのクエリで、Left関数を使用して、7桁の数値を抜き出す方法。
IDが8桁で入力されているのですが、左から7桁だけを抜き出して、全てのレコードを表示させたかったのですが、誤って入力されている7桁のIDしか表示されませんでした。
いつもExcelを使用している感覚だったので、文字の左から7桁の数値や文字列を抽出して表示してくれるものと思っていました。
元のテーブルに入力されているIDを変更することなく、
クエリで、7桁だけにして、その取り出した7桁で区別し、グループとして認識し合計を出したいと考えているのですが、どうすればよいのでしょうか。
宜しくお願い致します。

Aベストアンサー

>Left関数をする前は、5000行程なのですが、関数を加えたとたん4300程度に減ってしまいます。

関数を加えるのでは無く、関数だけ(演算フィールドのみ)のクエリを作成をして実行させます
単にleft関数で左から何文字取れという演算フィールドしか持たないクエリを実効させれば、指定した桁数に満たない場合には実際にある桁数まで、一文字も入っていない場合には0を返して、全データ分のクエリ結果を返します

全件分のデータが帰って来ないという事は作成しているクエリに問題ありの可能性高いです

先の書き込みに書きましたが、手順は演算フィールドのみのクエリを作成し実行させ全データが取得出来る事を確認してから、この演算フィールドのみのクエリに必用なフィールドを追加してゆくって事してください

QACCESS 重複データを1つだけ表示したい(初心者です)

ACCESSで複数のフィールドに全く同じレコードが複数存在します
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
愛知      田中      12
愛知      田中      12
三重      山本      23
三重      山本      23
岐阜      鈴木      33
岐阜      鈴木      33

もともと他のデーターベースからCSVで落としたものをインポートしているので、データの存在自体はどうしようもありませんが、これらの重複しているデータを1件だけ表示したいのです。つまり
(例)
フィールド1  フィールド2  フィールド3
愛知      田中      12
三重      山本      23
岐阜      鈴木      33

どのようにすればよいでしょうか。

Aベストアンサー

クエリにて[固有のレコード]プロパティーを[はい]にします

QACCESSでの文字と数字の結合について

フィールドとして

略称
連番

という二つのフィールドがあります。

そして、

管理コード

というフィールドを作ります。

管理コードには[略称]&[連番]を表示させたいと思っています。

希望の表示方法として数字を常に5桁で表示させたいと思っています。

ところが
略称にSPCが入っていて、連番に1があるとします。
単純に[略称]&[連番]では
SPC1になってしまいます。

私はこれをSPC00001と表示させたいと思っています。

エクセルだとA1のセルにSPC、
B1のセルに1が入っている場合、
C1で=A1 & text(B1,"00000")
とやるとうまくいきます。

これと同じようにクエリ内でできるかとおもったら、
textという関数はみつからず困っています。

可能であれば、どなたかご指導お願いします。

Aベストアンサー

フォームなどのコントロールでは管理コードのプロパティのコントロールソースに
=[略称] & Format([連番],"00000")
クエリでは
管理コード:[略称] & Format([連番],"00000")
で表示できます。

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

Qアクセスで複数のレコード情報を1レコードにまとめる方法 

アクセスにおいて
例えば以下のような1~6までのレコードを

1.Aさん,犬
2.Aさん,猫
3.Bさん,犬
4.Bさん,鳥
5.Bさん,豚
6.cさん,牛



1.A,犬,猫
2.B,犬,鳥,豚
3.C,牛

このように、この場合だったら、~さんを軸に、
ひとつのレコードとしてまとめることは可能でしょうか。

仕事で使いたいのですが、やり方がわからず非常に困っています。
お手数ですがご教示いただけると幸いです。

よろしくお願いいたします。

Aベストアンサー

通常のクエリーだけでは無理です

このテーブルをTBL(名前,ペット)とすると

モジュールに
Public Function PetNameAdd(pName) As String
Dim iRS As Recordset
Dim strSQL As String
Dim strRet As String

strRet = ""
strSQL = "SELECT ペット FROM TBL WHERE 名前 = '" & pName & "'"
Set iRS = CurrentDb.OpenRecordset(strSQL)

While iRS.EOF = False
If strRet = "" Then
strRet = iRS(0)
Else
strRet = strRet & "," & iRS(0)
End If
iRS.MoveNext
Wend

iRS.Close
Set iRS = Nothing
PetNameAdd = strRet
End Function

を登録しておいてクエリーで
SELECT 名前, PetNameAdd(名前) AS 全ペット
FROM (SELECT DISTINCT 名前 FROM TBL)

と書けば近いものは出来ます
しかしながらクエリーは頻繁に関数を呼び出すのであまりお勧めは出来ません

一度、全ペット用のテーブルをこの関数を利用して作り、後の操作をする方がマシンに対する負荷は少ないです

通常のクエリーだけでは無理です

このテーブルをTBL(名前,ペット)とすると

モジュールに
Public Function PetNameAdd(pName) As String
Dim iRS As Recordset
Dim strSQL As String
Dim strRet As String

strRet = ""
strSQL = "SELECT ペット FROM TBL WHERE 名前 = '" & pName & "'"
Set iRS = CurrentDb.OpenRecordset(strSQL)

While iRS.EOF = False
If strRet = "" Then
strRet = iRS(0)
Else
strRet = strRet & "...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング