質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

895閲覧

VBA 照合カウント計算 その2

jabe

総合スコア43

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/04/11 12:20

前提

●転記元
シート1
イメージ説明
●転記先※完成状態
シート2
イメージ説明
●転記先※完成状態
シート3
イメージ説明
ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

実現したいこと

以下VBAを作成しました。
今後データが多くなる為現状のやり方の場合動作が遅くなる恐れがある為、
配列等を用いて処理速度が速いプログラムを作成したいのですが、
方法がさっぱり分からない為、作成方法を教えていただきたいです。

転記元excelの共通キーと転記先excelを部分照合し、数値をカウント計算
①転記元excelのC列(C12〜C1300)と転記先excelのA列(A2〜A366)を照合して以下処理を実行
合致:合致年月のD列(D12〜)でセル値有無チェック
空白の場合:セルへ1記入
空白でない場合:+1カウント
不一致:処理を飛ばす
上記サイクルを以下ステップで繰り返す。
ステップ②
シート1     シート2   シート2  
照合       照合     セル入力
転記元:D列 → 転記先:A →転記先:E列
転記元:E列 → 転記先:A →転記先:F列
転記元:F列 → 転記先:A →転記先:G列
ステップ③
シート1     シート3   シート3
転記元:B列 → 転記先:A →転記先:B列

該当のソースコード

Sub 照合転記() Const source As String = "C:\Users\xxx\Desktop\yy\00_VBA\照合転記2" '転記元パス Const copy As String = "C:\Users\xxx\Desktop\yy\00_VBA\照合転記2" Const cn As String = "転記先.xlsx" Dim sslastline As String '転記元A最終行 Dim shlastline As String '転記元B最終行 Dim sklastline As String '転記先C最終行 Dim ssylastline As String '転記元D最終行 Dim ssyylastline As String '転記元E最終行 Dim clastline As String '転記先日付最終行 Dim sWb As Workbook '転記元ファイル変' Dim sWs As Worksheet '転記元ファイル変数 Dim cWb As Workbook '転記先ファイル変数 Dim cWs As Worksheet '転記先シート変数 Dim cWs1 As Worksheet '転記先製作指示台数シート変数 Dim a As Integer 'A繰返し回数 Dim b As Integer 'B繰返し回数 Dim c As Integer 'C繰返し回数 Dim d As Integer 'D繰返し回数 Dim e As Integer 'E繰返し回数 Dim sresult As String 'A検索キー Dim hresult As String 'B検索キー Dim kresult As String 'C検索キー Dim syresult As String 'D検索キー Dim syyresult As String 'E検索キー Dim csresult As Range 'A検索結果 Dim chresult As Range 'B検索結果 Dim ckresult As Range 'C検索結果 Dim csyresult As Range 'D検索結果 Dim csyyresult As Range 'E検索結果 Application.ScreenUpdating = False '画面チラツキ防止 Workbooks.Open Filename:=copy & "\" & cn '転記先ファイルを開く Set cWb = ActiveWorkbook Set cWs = cWb.Worksheets("シート2") Set cWs1 = cWb.Worksheets("シート3") clastline = cWs.Cells(Rows.Count, "A").End(xlUp).Row '転記先ファイル入力シート最終行定義 c1lastline = cWs1.Cells(Rows.Count, "A").End(xlUp).Row Set sWb = ThisWorkbook Set sWs = sWb.Worksheets("シート1") sslastline = sWs.Cells(Rows.Count, "C").End(xlUp).Row shlastline = sWs.Cells(Rows.Count, "D").End(xlUp).Row sklastline = sWs.Cells(Rows.Count, "E").End(xlUp).Row ssylastline = sWs.Cells(Rows.Count, "F").End(xlUp).Row ssyylastline = sWs.Cells(Rows.Count, "B").End(xlUp).Row cWs.Range(Cells(2, 4), Cells(clastline, 7)).ClearContents '転記先セル値削除 '//A For a = 12 To sslastline '転記元の12行目から最終行まで1行ずつチェック sresult = Format(sWs.Cells(a, 3), "yyyy/m/d") If sresult = "" Then GoTo next1: '空白飛ばし End If Set csresult = cWb.Worksheets("シート2").Range(Cells(2, 1), Cells(clastline, 1)).Find(sresult, LookIn:=xlValues) '転記先との比較 If Not csresult Is Nothing Then '合致000 If cWs.Cells(csresult.Row, 4).Value <> "" Then 'A列に値が入っていれば Cells(csresult.Row, 4).Value = Cells(csresult.Row, 4).Value + 1 ElseIf Not csresult Is Nothing Then 'A列に値が入っていなければ Cells(csresult.Row, 4).Value = 1 End If next1: End If Next a '//B For b = 12 To shlastline '転記元の12行目から最終行まで1行ずつチェック hresult = Format(sWs.Cells(b, 4), "yyyy/m/d") If hresult = "" Then GoTo next2: '空白飛ばし End If Set chresult = cWb.Worksheets("シート2").Range(Cells(2, 1), Cells(clastline, 1)).Find(hresult, LookIn:=xlValues) '転記先との比較 If Not chresult Is Nothing Then '合致 If cWs.Cells(chresult.Row, 5).Value <> "" Then 'B列に値が入っていれば Cells(chresult.Row, 5).Value = Cells(chresult.Row, 5).Value + 1 ElseIf Not chresult Is Nothing Then 'B列に値が入っていなければ Cells(chresult.Row, 5).Value = 1 End If next2: End If Next b '//C For c = 12 To sklastline '転記元の12行目から最終行まで1行ずつチェック kresult = Format(sWs.Cells(c, 5), "yyyy/m/d") If kresult = "" Then GoTo next3: '空白飛ばし End If Set ckresult = cWb.Worksheets("シート2").Range(Cells(2, 1), Cells(clastline, 1)).Find(kresult, LookIn:=xlValues) '転記先との比較 If Not ckresult Is Nothing Then '合致 If cWs.Cells(ckresult.Row, 6).Value <> "" Then 'C列に値が入っていれば Cells(ckresult.Row, 6).Value = Cells(ckresult.Row, 6).Value + 1 ElseIf Not ckresult Is Nothing Then 'C列に値が入っていなければ Cells(ckresult.Row, 6).Value = 1 End If next3: End If Next c '//D For d = 12 To ssylastline '転記元の12行目から最終行まで1行ずつチェック syresult = Format(sWs.Cells(d, 6), "yyyy/m/d") If syresult = "" Then GoTo next4: '空白飛ばし End If Set csyresult = cWb.Worksheets("シート2").Range(Cells(2, 1), Cells(clastline, 1)).Find(syresult, LookIn:=xlValues) '転記先との比較 If Not csyresult Is Nothing Then '合致 If cWs.Cells(csyresult.Row, 7).Value <> "" Then 'D列に値が入っていれば Cells(csyresult.Row, 7).Value = Cells(csyresult.Row, 7).Value + 1 ElseIf Not csyresult Is Nothing Then 'D列に値が入っていなければ Cells(csyresult.Row, 7).Value = 1 End If next4: End If Next d '//E cWb.Worksheets("シート3").Activate cWs1.Range(Cells(2, 2), Cells(clastline, 2)).ClearContents For e = 12 To ssyylastline '転記元の2行目から最終行まで1行ずつチェック syyresult = Format(sWs.Cells(e, 2), "yyyy年m月") 'yyyy年m月に変換 If syyresult = "" Then GoTo next5: '空白飛ばし End If Set csyyresult = cWb.Worksheets("シート3").Range(Cells(2, 1), Cells(c1lastline, 1)).Find(syyresult, LookIn:=xlValues) '転記先との比較 If Not csyyresult Is Nothing Then '合致 If cWs1.Cells(csyyresult.Row, 2).Value <> "" Then 'E列に値が入っていれば Cells(csyyresult.Row, 2).Value = Cells(csyyresult.Row, 2).Value + 1 Else '値が入っていなければ Cells(csyyresult.Row, 2).Value = 1 End If next5: End If Next e Application.DisplayAlerts = False cWb.Worksheets("シート2").Activate '入力シートへ戻す ActiveWorkbook.SaveAs Filename:=copy & "\" & "転記先.xlsx" '保存 ActiveWorkbook.Close Application.DisplayAlerts = True 'メッセージ表示※上書き保存 Application.ScreenUpdating = True '画面チラツキ防止 MsgBox "更新完了" End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

既に回答が出てますし、Scripting.Dictionaryを使うという事であまり大差ないと思いますが回答します。

変数名とかは、質問者さんのものを踏襲できるところは踏襲して
それ以外は、てきとうにつけました。
初めの列についてのコードのみにしてあります。

おかしい所や不明なところあればご指摘ください。

VBA

1Sub 照合転記() 2Const copy As String= "C:\Users\xxx\Desktop\yy\00_VBA\照合転記2" 3Const cn As String = "転記先.xlsx" 4 5Dim sslastline As Integer '転記元A最終行 6Dim shlastline As Integer '転記元B最終行 7Dim sklastline As Integer '転記先C最終行 8Dim ssylastline As Integer '転記元D最終行 9Dim ssyylastline As Integer '転記元E最終行 10Dim clastline As Integer '転記先日付最終行 11Dim c1lastline As Integer '転記先2日付最終行 12 13Dim sWb As Workbook '転記元ファイル変' 14Dim sWs As Worksheet '転記元ファイル変数 15Dim cWb As Workbook '転記先ファイル変数 16Dim cWs As Worksheet '転記先シート変数 17Dim cWs1 As Worksheet '転記先製作指示台数シート変数 18 19 20Set sWb = ThisWorkbook 21Set sWs = sWb.Worksheets("シート1") 22sslastline = sWs.Cells(Rows.Count, "C").End(xlUp).Row 23shlastline = sWs.Cells(Rows.Count, "D").End(xlUp).Row 24sklastline = sWs.Cells(Rows.Count, "E").End(xlUp).Row 25ssylastline = sWs.Cells(Rows.Count, "F").End(xlUp).Row 26ssyylastline = sWs.Cells(Rows.Count, "B").End(xlUp).Row 27 28 29Set cWb = Workbooks.Open(Filename:=copy & "\" & cn) '転記先ファイルを開く 30Set cWs = cWb.Worksheets("シート2") 31Set cWs1 = cWb.Worksheets("シート3") 32clastline = cWs.Cells(Rows.Count, "A").End(xlUp).Row '転記先ファイル入力シート最終行定義 33c1lastline = cWs1.Cells(Rows.Count, "A").End(xlUp).Row 34 35Dim t_Value As Variant 36 37Dim t_DicCount As Object 38Dim i As Long 39 40Application.ScreenUpdating = False 41 42cWs.Range(cWs.Cells(2, 4), cWs.Cells(clastline, 7)).ClearContents 43cWs1.Range(cWs1.Cells(2, 2), cWs1.Cells(c1lastline, 2)).ClearContents 44 45' 転記元C列の集計 46Set t_DicCount = CreateObject("Scripting.Dictionary") 47For i = 12 To sslastline 48 t_Value = sWs.Cells(i, 3) 49 If t_DicCount.Exists(t_Value) Then 50 t_DicCount.Item(t_Value) = t_DicCount.Item(t_Value) + 1 51 Else 52 t_DicCount.Add t_Value, 1 53 End If 54Next 55 56' 転記元C列の集計結果出力 57For i = 2 To clastline 58 t_Value = cWs.Cells(i, 1) 59 If t_DicCount.Exists(t_Value) Then 60 cWs.Cells(i, 4) = t_DicCount.Item(t_Value) 61 End If 62Next 63 64' 転記元B列の集計 65Set t_DicCount = CreateObject("Scripting.Dictionary") 66For i = 12 To ssyylastline 67 t_Value = Format(sWs.Cells(i, 2), "yyyy年m月") 68 If t_DicCount.Exists(t_Value) Then 69 t_DicCount.Item(t_Value) = t_DicCount.Item(t_Value) + 1 70 Else 71 t_DicCount.Add t_Value, 1 72 End If 73Next 74 75' 転記元B列の集計結果出力 76For i = 2 To c1lastline 77 t_Value = cWs1.Cells(i, 1).Text 78 If t_DicCount.Exists(t_Value) Then 79 cWs1.Cells(i, 2) = t_DicCount.Item(t_Value) 80 End If 81Next 82 83Application.ScreenUpdating = True 84 85End Sub 86

投稿2022/04/12 12:28

編集2022/04/12 23:16
xail2222

総合スコア1497

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2022/04/12 23:28

①シート1のD列の日付の出現回数をシート2のE列へ設定する機能 ②シート1のE列の日付の出現回数をシート2のF列へ設定する機能 ③シート1のF列の日付の出現回数をシート2のG列へ設定する機能 ④転記先.xlsxをクローズする機能 上記の機能が実装されていませんが、意図的なものでしょうか?
xail2222

2022/04/13 00:33 編集

コメントありがとうございます。 集計して結果を貼り付ける部分が不明だと思ったのでその機能だけにしました。 他の部分は余り気にしていません。 わかりやすくしたつもりでしたが、Dictionaryの部分がまだ難しいかな
xail2222

2022/04/13 00:42 編集

と思っていましたが、今見直すと質問者さんのコード ActiveWorkbook.SaveAs となってますね。 余りよろしくないですね。 すぐ終わるので大した問題にはならないと思いますが。
jabe

2022/04/13 14:42

対応していただきありがとうございます。 指摘もしていただきありがとうございます。ActiveWorkbook.SaveAsについてはtatsu99さんコードを見て”こうやるんだ”と理解する事が出来ました。 Dictionaryが理解出来ていない為、tatsu99さんのコードを理解し、その後xail2222さんのコードを理解したいと考えていますので、引き続きよろしくお願いします。 みなさん、Dictionaryをどのように理解し活用出来る様になったのか、知りたいです😢。
xail2222

2022/04/13 21:21 編集

私が一番始めにDictionaryを知った時の解釈は、配列のインデックスが整数だけではないバージョンと言うような解釈でした。 普通の配列ならA(1)=2という感じで値を入れたりするわけですが、DictionaryはA("あ")=2という感じでキーとなる"あ"に対して値2を対応させるものという感じになります。 この事はもう理解済みかも知れませんが、取り敢えず私の解釈はこんな感じです。 活用出来るようになるには、何でもそうですが使っていって覚えるしか無いのでは。 あとDictionaryのすごい所は、仕組みはさておきキーから値を参照する時間がとても早い事です。 私のコードの説明をしますと、 If t_DicCount.Exists(t_Value) Then① t_DicCount.Item(t_Value) = t_DicCount.Item(t_Value) + 1② Else t_DicCount.Add t_Value, 1③ End if ①t_Valueが既にキーとして使用済みかチェック ②使用済みの場合、値を1加算 ③使用済みで無い場合、1を登録 という流れです。 これを繰り返す事でt_Valueの内容毎の件数がカウントできます。 はじめの質問者さんのコードもfindして一番始めは1をセット、それ以降は1を加算という流れでしたので、似ているかと思います。 tatsu99さんのコードを理解出来れば、私のコードを理解するのは難しくないと思うので頑張って下さい。
jabe

2022/04/16 02:44

返信ありがとうございます。 コード説明少し理解出来ました、トライしてみます。 やはり、大量データを扱うには必須スキルですね。 実践で頑張ってみようと思います。
guest

0

①以下コードはdicT1.Item(key) でキー項目(Key)に対応する値を設定・取得だと思いますが、=で処理しているのはどういう意味になるのでしょうか?
dicT1(key) = row2
dicT2(key) = 0
②以下コードで呼び出している()内はどういう意味になるのでしょうか?
Call set_dicT1(arrval, dicT1, sWs, "C", maxrowC, 1)

①について
dicT1(key) = row2は
dicT1.add key,row2
と同じ意味です。
但し、既に同じkeyが存在する場合、dicT1.add key,row2はエラーになります。(そこで止まります)
dicT1(key) = row2の場合はrow2が上書きされます。
例としてkeyの値が'20220131'でrow2の値が20とします。
(20行目に2022/1/31がある場合です)
dicT1(key) = row2とdicT1.add key,row2は同じ結果になります。
そのあと、もし、40行目に2022/1/31があった場合ですが(実際はないはずですが)
dicT1(key) = row2を実行するとdict(key)には40が設定されます。(40の値で上書きされます)
dicT1.add key,row2はエラーになります。

②について
Call set_dicT1(arrval, dicT1, sWs, "C", maxrowC, 1)は、

VBA

1 Dim wrow As Long 2 Dim key As String 3 Dim row2 As Long 4 For wrow = 12 To maxrowC 5 key = Format(sWs.Cells(wrow, "C").Value, "yyyymmdd") 6 If key <> "" Then 7 If dicT1.Exists(key) = True Then 8 row2 = dicT1(key) 9 arrval(1, row2) = arrval(1, row2) + 1 10 End If 11 End If 12 Next

と同じことです。これでC列の日付の回数をarrval(1,xxx)に格納できます。
ここで、"C",maxrowC,1の値を"D",maxrowD,2にしたものをそのあとに同じように作れば、
D列の日付の回数をarrval(2,xxx)に格納できます。
結局、にたような同じ処理を4回繰り返すのは、長くなるので、
1つのサブルーチンで処理しているわけです。
(異なる部分のみを引数で渡せば、その引数に応じた処理をサブルーチン側で行います)

投稿2022/04/14 00:26

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jabe

2022/04/16 02:47

回答ありがとうございます。 重複時に上書きされるという意味なんですね、勉強になりました。 私はコードが長くなる傾向があるので、サブルーチンも実践で使用し学んでいこうと思います。
guest

0

ベストアンサー

スピード対策なので、Scripting.Dictionaryを使用しました。
シート2のA列2行目~最終行には、空欄がないこと及び日付の重複がないことが前提です。
シート3のA列2行目~最終行には、空欄がないこと及び年月の重複がないことが前提です。

VBA

1Option Explicit 2Public Sub 照合転記() 3 Const copy As String = "C:\Users\xxx\Desktop\yy\00_VBA\照合転記2" 4 Const cn As String = "転記先.xlsx" 5 Dim sWb As Workbook '転記元ファイル変' 6 Dim sWs As Worksheet '転記元ファイル変数 7 Dim cWb As Workbook '転記先ファイル変数 8 Dim cWs As Worksheet '転記先シート変数 9 Dim cWs1 As Worksheet '転記先製作指示台数シート変数 10 Dim maxrowC As Long '転記元C列最終行 11 Dim maxrowD As Long '転記元D列最終行 12 Dim maxrowE As Long '転記元E列最終行 13 Dim maxrowF As Long '転記元F列最終行 14 Dim maxrowB As Long '転記元B列最終行 15 Dim maxrow2 As Long '転記先シート2 A列最終行 16 Dim maxrow3 As Long '転記先シート3 A列最終行 17 Dim row1 As Long 'シート1 行番号 18 Dim row2 As Long 'シート2 行番号 19 Dim row3 As Long 'シート3 行番号 20 Dim ix As Long 21 Dim key As String 22 Dim keyv As Variant 23 Dim arrval As Variant '回数格納配列(ix,行番号) 24 Dim dicT1 As Object '連想配列 キー:yyyymmdd 値:シート1の行番号 25 Dim dicT2 As Object '連想配列 キー:yyyymm 値:回数 26 Set dicT1 = CreateObject("Scripting.Dictionary") ' 連想配列の定義 27 Set dicT2 = CreateObject("Scripting.Dictionary") ' 連想配列の定義 28 Set sWb = ThisWorkbook 29 Set sWs = sWb.Worksheets("シート1") 30 maxrowC = sWs.Cells(Rows.Count, "C").End(xlUp).Row 31 maxrowD = sWs.Cells(Rows.Count, "D").End(xlUp).Row 32 maxrowE = sWs.Cells(Rows.Count, "E").End(xlUp).Row 33 maxrowF = sWs.Cells(Rows.Count, "F").End(xlUp).Row 34 maxrowB = sWs.Cells(Rows.Count, "B").End(xlUp).Row 35 36 Application.ScreenUpdating = False '画面チラツキ防止 37 38 Set cWb = Workbooks.Open(copy & "\" & cn) '転記先ファイルを開く 39 Set cWs = cWb.Worksheets("シート2") 40 Set cWs1 = cWb.Worksheets("シート3") 41 maxrow2 = cWs.Cells(Rows.Count, "A").End(xlUp).Row '転記先ファイル入力シート最終行定義 42 maxrow3 = cWs1.Cells(Rows.Count, "A").End(xlUp).Row 43 cWs.Range("D2:G" & maxrow2).ClearContents 44 cWs1.Range("B2:B" & maxrow3).ClearContents 45 ReDim arrval(4, maxrow2) As Long 46 'シート2の日付と行番号を記憶 47 For row2 = 2 To maxrow2 48 key = Format(cWs.Cells(row2, "A").Value, "yyyymmdd") 49 dicT1(key) = row2 50 Next 51 'シート3の日付を記憶 52 For row3 = 2 To maxrow3 53 key = Format(cWs1.Cells(row3, "A").Value, "yyyymm") 54 dicT2(key) = 0 55 Next 56 'シート1 C,D,E,F列処理 57 Call set_dicT1(arrval, dicT1, sWs, "C", maxrowC, 1) 58 Call set_dicT1(arrval, dicT1, sWs, "D", maxrowD, 2) 59 Call set_dicT1(arrval, dicT1, sWs, "E", maxrowE, 3) 60 Call set_dicT1(arrval, dicT1, sWs, "F", maxrowF, 4) 61 'シート2へ回数を設定 62 For row2 = 2 To maxrow2 63 For ix = 1 To 4 64 If arrval(ix, row2) > 0 Then 65 cWs.Cells(row2, 3 + ix).Value = arrval(ix, row2) 66 End If 67 Next 68 Next 69 'シート1 B列処理 70 For row1 = 12 To maxrowB 71 key = Format(sWs.Cells(row1, "B").Value, "yyyymm") 72 If key <> "" Then 73 If dicT2.exists(key) = True Then 74 dicT2(key) = dicT2(key) + 1 75 End If 76 End If 77 Next 78 'シート3へ回数を設定 79 row3 = 2 80 For Each keyv In dicT2.keys 81 If dicT2(keyv) > 0 Then 82 cWs1.Cells(row3, "B").Value = dicT2(keyv) 83 End If 84 row3 = row3 + 1 85 Next 86 cWb.Save 87 cWb.Close 88 Application.ScreenUpdating = True '画面チラツキ防止 89 MsgBox "更新完了" 90 91End Sub 92 93Private Sub set_dicT1(ByRef arrval As Variant, ByVal dicT1 As Object, ByVal ws As Worksheet, ByVal col As String, ByVal maxrow As Long, ByVal ix As Long) 94 Dim wrow As Long 95 Dim key As String 96 Dim row2 As Long 97 For wrow = 12 To maxrow 98 key = Format(ws.Cells(wrow, col).Value, "yyyymmdd") 99 If key <> "" Then 100 If dicT1.exists(key) = True Then 101 row2 = dicT1(key) 102 arrval(ix, row2) = arrval(ix, row2) + 1 103 End If 104 End If 105 Next 106End Sub 107

投稿2022/04/12 05:23

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jabe

2022/04/13 14:36

迅速な対応ありがとうございます。 実行したところ、凄く速く処理が完了し驚きました。 お手数かけますが、Dictionaryオブジェクトが難しく理解出来ていない為、以下内容を教えてください。 ①以下コードはdicT1.Item(key) でキー項目(Key)に対応する値を設定・取得だと思いますが、=で処理しているのはどういう意味になるのでしょうか? dicT1(key) = row2 dicT2(key) = 0 ②以下コードで呼び出している()内はどういう意味になるのでしょうか? Call set_dicT1(arrval, dicT1, sWs, "C", maxrowC, 1)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問