2018年10月4日木曜日
ミニマクロ
Sub 空白埋め()
'########################
'# 範囲を指定して空白を埋めます
'########################
Dim SCol As Variant, RCol As Variant, SRow As Variant
SCol = InputBox("埋める【開始列】を" & vbCrLf & _
"【数字】で入力")
ECol = InputBox("埋める【終了列】を" & vbCrLf & _
"【数字】で入力")
SRow = InputBox("何行目から始めますか?" & vbCrLf & _
"【開始行】【数字】で入力")
'キャンセルを押されたらマクロを停止する
If SCol = "" Or ECol = "" Or SRow = "" Then Exit Sub
'エラーチェックをしたので数字にする
SCol = Val(SCol)
ECol = Val(ECol)
SRow = Val(SRow)
Dim Sh As Worksheet
Dim rngTARGET As Range
Dim BUF As Variant
Dim r As Long
Dim c As Long
Dim MaxRow As Long
Dim cRM As Range
Set Sh = ActiveSheet
'指定した列の中で一番行数が多い列の行数を変数に入れる【MaxRow】
For Each cRM In Range(Cells(SRow, SCol), Cells(SRow, ECol)) '最初の行の開始終了列
If Sh.Cells(Rows.Count, cRM.Column).End(xlUp).Row > MaxRow Then
MaxRow = Sh.Cells(Rows.Count, cRM.Column).End(xlUp).Row
End If
Next
'2行目以下の使用済みセル範囲の値を配列化【rngTARGET】
Set rngTARGET = Sh.Range(Cells(SRow, SCol), Cells(MaxRow, ECol))
BUF = rngTARGET.Value
'空白を埋める
For r = 1 To UBound(BUF) '行方向
For c = 1 To UBound(BUF, 2)
If IsEmpty(BUF(r, c)) Then
BUF(r, c) = BUF(r - 1, c)
End If
Next c
Next r
'データ書き出し
rngTARGET.Value = BUF
'後始末
Erase BUF
Set rngTARGET = Nothing
Set Sh = Nothing
MsgBox "空白を埋めました"
End Sub
Sub 確認_複数シートを1シート()
'########################
'# 複数のシートを1つのシートにまとめます。
'# 見出しは最初のシートから作られます。
'# 1行目に見出し行がある同じ形式のシートを1枚にまとめたい時に使います。
'########################
選択 = MsgBox("見出しが同じ複数のシートを1つのシートにまとめます。" & vbCrLf & _
"見出しは最初のシートから作られます。(見出しの複数行指定は不可)" & vbCrLf & _
"実行しますか?", vbYesNo + vbExclamation, _
"複数シートを1シートにまとめる")
If 選択 = vbYes Then '[はい]なら
複数シートを1シート
Else '[いいえ]なら
Exit Sub
End If
End Sub
Sub 複数シートを1シート()
'########################
'# 複数のシートを1つのシートにまとめます。
'# 見出しは最初のシートから作られます。
'# 1行目に見出し行がある同じ形式のシートを1枚にまとめたい時に使います。
'########################
Dim SCol As Variant, SRow As Variant
SRow = InputBox("見出しは【何行目】にありますか?" & vbCrLf & _
"【数字】で入力してください")
SCol = InputBox("データは【何列目】から始まりますか?" & vbCrLf & _
"【数字】で入力してください")
'キャンセルが押されたらマクロを終了する
If SRow = "" Or SCol = "" Then Exit Sub
'エラーチェックをしたので数字にする
SRow = Val(SRow)
SCol = Val(SCol)
Dim i As Integer
Dim MaxRow As Long, MaxRow2 As Long, ECol As Long
Dim cRM As Range
Dim PSh As Worksheet
Dim CSh As Worksheet
Application.ScreenUpdating = False
'-----全データシートの有無をチェックします
Call sh_check
Set PSh = Worksheets("全データ")
Set CSh = Worksheets(2)
'------見出し行をたどって列数を決める
ECol = CSh.Cells(SRow, Columns.Count).End(xlToLeft).Column
'------列見出しをコピー
CSh.Range(CSh.Cells(SRow, SCol), CSh.Cells(SRow, ECol)).Copy PSh.Range(PSh.Cells(1, 1), PSh.Cells(1, ECol))
For i = 2 To Worksheets.Count
With Worksheets(i)
Set CSh = Worksheets(i)
'指定した列の中で一番行数が多い列の行数を変数に入れる
For Each cRM In Range(.Cells(SRow, SCol), .Cells(SRow, ECol))
If .Cells(Rows.Count, cRM.Column).End(xlUp).Row > MaxRow Then
MaxRow = .Cells(Rows.Count, cRM.Column).End(xlUp).Row
End If
Next
'-----シートのデータが2行以上の場合にコピー
If MaxRow >= 2 Then
'指定した列の中で一番行数が多い列の行数を変数に入れる★貼付側
For Each cRM In Range(PSh.Cells(1, 1), PSh.Cells(1, ECol))
If PSh.Cells(Rows.Count, cRM.Column).End(xlUp).Row > MaxRow2 Then
MaxRow2 = PSh.Cells(Rows.Count, cRM.Column).End(xlUp).Row + 1
End If
Next
.Activate
.Range(Cells(SRow + 1, SCol), Cells(MaxRow, ECol)).Copy PSh.Cells(MaxRow2, 1)
End If
End With
Next i
PSh.Activate
Range("A1").Select
Application.ScreenUpdating = True
MsgBox "シートをまとめました"
End Sub
Sub sh_check()
'########################
'# シートの有無を判定
'########################
Dim newSh As String
Dim Sh As Worksheet, myFlag As Boolean
newSh = "全データ"
myFlag = False
For Each Sh In ActiveWorkbook.Worksheets
If Sh.Name = newSh Then
myFlag = True
'-----全データシートのデータをクリアし、先頭へ移動します
Worksheets(newSh).Cells.ClearContents
Worksheets(newSh).Move before:=Worksheets(1)
End If
Exit For
Next Sh
'-----全データシートを先頭へ追加します
If myFlag = False Then
ActiveWorkbook.Worksheets.Add(before:=Worksheets(1)).Name = newSh
End If
End Sub
Sub 確認_複数列の比較()
'########################
'# 4列までのデータを比較します。
'# 同じデータがあればOK、なければNGを出します。
'# 動きが重いので行数が多いと待たされます
'########################
選択 = MsgBox("上下に並んだ2つのデータを比較します。" & vbCrLf & _
"【!】必ずA列から開始します" & vbCrLf & _
"【!】双方のデータ間は2行以上開けてください" & vbCrLf & _
"比較できるのは4列までです" & vbCrLf & _
"実行しますか?", vbYesNo + vbExclamation, _
"複数列の比較")
If 選択 = vbYes Then
複数列の比較
Else
Exit Sub
End If
End Sub
Sub 複数列の比較()
'########################
'# 4列までのデータを比較します。
'# 同じデータがあればOK、なければNGを出します。
'# 動きが重いので行数が多いと待たされます
'########################
Dim i As Integer, ii As Integer, res1 As Variant, res2 As Variant
res1 = InputBox("データ1の開始行番号を入力してください")
res2 = InputBox("データ2の開始行を入力してください")
'キャンセルを押されたらマクロを停止する
If res1 = "" Or res2 = "" Then Exit Sub
'エラーチェックをしたので数字にする
res1 = Val(res1)
res2 = Val(res2)
'画面更新を休止する
' Application.ScreenUpdating = False
For i = res1 To Range("A" & res1).End(xlDown).Row
For ii = res2 To Range("A" & res2).End(xlDown).Row
If Cells(ii, 1).Value = Cells(i, 1).Value And Cells(ii, 2).Value = _
Cells(i, 2).Value And Cells(ii, 3).Value = Cells(i, 3).Value Then
If Cells(ii, 4).Value <> Cells(i, 4).Value Then
If Cells(i, 6).Value = "" Then
Cells(i, 6).Value = Rows(ii).Row
Else
Cells(i, 6).Value = Cells(i, 6).Value & "," & Rows(ii).Row
End If
Else
If Cells(i, 6).Value = "" Then
Cells(i, 6).Value = Rows(ii).Row & "-OK"
Else
Cells(i, 6).Value = Cells(i, 6).Value & "," & Rows(ii).Row & "-OK"
End If
End If
End If
Next
Next
With Cells(res1, 5)
.FormulaR1C1 = "=if(iserror(find(""OK"",rc[1],1))=false,""OK"",""NG"")"
.Copy
End With
Range(Cells(res1, 5), Cells(Range("A" & res1).End(xlDown).Row, 5)).PasteSpecial Paste:=xlPasteFormulas
Application.CutCopyMode = False
' Application.ScreenUpdating = True
MsgBox "比較が完了しました"
End Sub
Sub ハイパーリンク削除()
'########################
'# 開いているシートのハイパーリンクを全部削除します。
'#
'#
'########################
選択 = MsgBox("今開いているシートのハイパーリンクを全部削除します。実行しますか?", vbYesNo + vbExclamation, _
"ハイパーリンクの削除")
If 選択 = vbYes Then
ActiveSheet.Hyperlinks.Delete
Else
Exit Sub
End If
MsgBox "ハイパーリンクを削除しました"
End Sub
Sub 文字列を結合する()
'########################
'# 複数行に同じ文字列が連続するセルを結合します
'#
'#
'########################
Dim myCol As Integer
Dim SCol As Variant
Dim ECol As Variant
Dim SRow As Variant
Dim myRng As Range
Dim myRow As Long
Dim cRM As Range
Dim MaxRow As Long
SCol = InputBox("縦方向に同じ文字があれば結合します。【何列目】から開始しますか?数字で列を指定してください")
ECol = InputBox("何列目まで作業しますか?数字で列を指定してください")
SRow = InputBox("何行目から開始しますか?数字で行を指定してください")
'キャンセルを押されたらマクロを停止する
If SCol = "" Or ECol = "" Or SRow = "" Then Exit Sub
'エラーチェックをしたので数字にする
SCol = Val(SCol)
ECol = Val(ECol)
SRow = Val(SRow)
'指定した列の中で一番行数が多い列の行数を変数に入れる
For Each cRM In Range(Cells(SRow, SCol), Cells(SRow, ECol))
If Cells(Rows.Count, cRM.Column).End(xlUp).Row > MaxRow Then
MaxRow = Cells(Rows.Count, cRM.Column).End(xlUp).Row
End If
Next
'画面更新を休止する
Application.ScreenUpdating = False
'列[myCol]==============================
myCol = SCol 'SCol 列から
Do While myCol <= ECol 'ECol列まで、以下を繰り返します
'行[myRow]==============================
'指定行から各列を場所指定
Set myRng = Cells(SRow, myCol)
'指定行、指定列の中で以下作業をする
With Cells(myRow, myCol)
'今いる行の上の一つ下と今の行の値が同じなら
If .Value = .Offset(1, 0).Value Then
'下の行と今の行を範囲指定する
Set myRng = Union(myRng, .Offset(1, 0))
'下の行が違う値なら
Else
'指定範囲の結合を実行する
Application.DisplayAlerts = False
myRng.Merge
Application.DisplayAlerts = True
'一つ下に進む
Set myRng = .Offset(1, 0)
End If
End With
Next
'列================
'次の列に進む
myCol = myCol + 1
Loop
'画面更新を再開する
Application.ScreenUpdating = True
MsgBox "結合しました"
End Sub
Sub オートフィルタ等解除()
'########################
'# ウィンドウ分割とオートフィルタを解除
'# 解除したいしオートを開いてから実行する
'#
'########################
Dim xlApp As Excel.Application
選択 = MsgBox("今開いているシートのウィンドウ分割とオートフィルタを解除します。実行しますか?", vbYesNo + vbExclamation, _
"ウィンドウ分割とオートフィルタを解除")
If 選択 = vbYes Then
'画面更新を休止する
Application.ScreenUpdating = False
Cells.Select
Selection.EntireColumn.Hidden = False
ウィンドウ分割解除
オートフィルタ解除
Else
Exit Sub '実行中止
End If
'画面更新を再開する
Application.ScreenUpdating = True
MsgBox "ウィンドウ分割とオートフィルタを解除しました"
End Sub
Sub オートフィルタ解除()
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
End Sub
Sub ウィンドウ分割解除()
ActiveWindow.FreezePanes = False
End Sub
Sub 指定行削除す()
'########################
'# 特定の文字列がある行を削除したい場合に使用
'# 作業したいシートを開いてから実行する
'#
'########################
res1 = InputBox("指定したキーワードがある行を削除します。" & vbCrLf & _
"【キーワード】を入力してください「*」使用可。")
SCol = InputBox("キーワードがある【列】は何列目ですか?" & vbCrLf & _
"【数字】で指定してください")
'キャンセルを押されたらマクロを停止する
If SCol = "" Then Exit Sub
'エラーチェックをしたので数字にする
SCol = Val(SCol)
'データ最終行
MaxRow = Cells(Rows.Count, SCol).End(xlUp).Row
Application.ScreenUpdating = False
For i = MaxRow To 1 Step -1
If Cells(i, SCol) Like res1 Then
Range(i & ":" & i).Delete
End If
Next i
Application.ScreenUpdating = True
MsgBox "行を削除しました"
End Sub
Sub 指定行挿入()
'########################
'# 特定の文字列の上に行を挿入したい場合に使用
'# 作業したいシートを開いてから実行する
'#
'########################
Dim res1 As String
Dim MaxRow As Long
Dim i As Long
Dim SCol As Variant
res1 = InputBox("指定したキーワードがある行の上に行を挿入します。" & vbCrLf & _
"【キーワード】を入力してください「*」使用可。")
SCol = InputBox("キーワードがある【列】は何列目ですか?" & vbCrLf & _
"【数字】で指定してください")
'キャンセルを押されたらマクロを停止する
If SCol = "" Then Exit Sub
'エラーチェックをしたので数字にする
SCol = Val(SCol)
'データ最終行
MaxRow = Cells(Rows.Count, SCol).End(xlUp).Row
Application.ScreenUpdating = False
For i = MaxRow To 1 Step -1
If Cells(i, SCol) Like res1 Then
Range(i & ":" & i).Insert
End If
Next i
Application.ScreenUpdating = True
MsgBox "行を挿入しました"
End Sub
Sub 指定列削除()
'########################
'# 特定の見出しの前に列を挿入したい場合に使用
'# 作業したいシートを開いてから実行する
'# 画面更新をoffにすると削除できない・・
'########################
Dim res1 As String
Dim SRow As Variant
Dim MaxCol As Long
Dim i As Long
res1 = InputBox("指定したキーワードがある列を削除します。" & vbCrLf & _
"【キーワード】を入力してください。「*」使用可")
SRow = InputBox("キーワードがある【行】は何行目ですか?" & vbCrLf & _
"【数字】で指定してください")
'キャンセルを押されたらマクロを停止する
If SRow = "" Then Exit Sub
'エラーチェックをしたので数字にする
SRow = Val(SRow)
'データ最終列
MaxCol = Cells(SRow, Columns.Count).End(xlToLeft).Column
For i = MaxCol To 1 Step -1
If Cells(SRow, i) Like res1 Then
Columns(i).Delete
End If
Next i
MsgBox "列を削除しました"
End Sub
Sub 指定列挿入()
'########################
'# 特定の見出しの前に列を挿入したい場合に使用
'# 作業したいシートを開いてから実行する
'#
'########################
Dim res1 As String
Dim SRow As Variant
Dim MaxCol As Long
Dim i As Long
res1 = InputBox("指定したキーワードがある列の前に列を挿入します。" & vbCrLf & _
"【キーワード】を入力してください。「*」使用可")
SRow = InputBox("キーワードがある【行】は何行目ですか?" & vbCrLf & _
"【数字】で指定してください")
'キャンセルを押されたらマクロを停止する
If SRow = "" Then Exit Sub
'エラーチェックをしたので数字にする
SRow = Val(SRow)
'データ最終列
MaxCol = Cells(SRow, Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = False
For i = MaxCol To 1 Step -1
If Cells(SRow, i) Like res1 Then
Columns(i).Insert
End If
Next i
Application.ScreenUpdating = False
MsgBox "列を挿入しました"
End Sub
Sub 指定列を全角に()
'########################
'# 半角を全角に変換します
'#
'########################
Dim x As Long
Dim y1 As Long
Dim y2 As Long
Dim aa As valiant
Dim bb As Range
y1 = InputBox("全角にしたい開始列を数字で入力してください")
y2 = InputBox("全角にしたい終了列を数字で入力してください") + 1
x = InputBox("全角にしたい行のはじめを数字で入力してください")
Do While y1 < y2
Columns(y1).Select '列を選択します
Set bb = Intersect(Selection, ActiveSheet.UsedRange) '選択されたシートが指定の基準(コード入り)と一致する場合
aa = bb.Value
For x = x To UBound(aa, y1) '1列1行~データが入っている最後のaa行1列まで
aa(x, y1) = StrConv(aa(x, y1), vbWide) '文字列を数字にします
Next x
bb.Value = aa
Set bb = Nothing
y1 = y1 + 1
Loop
End Sub
End Sub
2018年10月1日月曜日
アンインストーラ2
on error resume next
dim installPath
dim addInName
dim addInFileName
dim objExcel
dim objAddin
'アドイン情報を設定
addInName="○ミニマクロ"
addInFileName="MacroTools.xlam"
if Msgbox(addInName & "マクロをアンインストールしますか?", vbyesno + vbQuestion)=vbno then
wscript.quit
end if
'Excelインスタンス化
set objExcel=createobject("Excel.application")
objExcel.workbooks.add
'アドイン登録解除
for i = 1 to objExcel.addins.count
set objAddin = objExcel.addins.item(i)
if objAddin.Name = addInFileName then
objAddin.Installed = false
end if
next
objExcel.Quit
set objAddin = nothing
set objExcel = nothing
set objWshShell = createobject("WScript.Shell")
set objFileSys = createobject("Scripting.FileSystemObject")
'インストール先パスの作成
installPath = objWshShell.SpecialFolders("Appdata") & "\Microsoft\Addins\" & addInFileName
'ファイル削除
if objFileSys.FileExists(installPath) = true then
objFileSys.DeleteFile installPath , true
else
msgbox "マクロファイルが存在しません", vbExclamation
end if
set objWshShell = nothing
set objFileSys = nothing
if Err.Number = 0 then
msgbox "マクロのアンインストールが終了しました", vbInformation
else
msgbox "エラーが発生しました。実行環境を確認してください"
end if
dim installPath
dim addInName
dim addInFileName
dim objExcel
dim objAddin
'アドイン情報を設定
addInName="○ミニマクロ"
addInFileName="MacroTools.xlam"
if Msgbox(addInName & "マクロをアンインストールしますか?", vbyesno + vbQuestion)=vbno then
wscript.quit
end if
'Excelインスタンス化
set objExcel=createobject("Excel.application")
objExcel.workbooks.add
'アドイン登録解除
for i = 1 to objExcel.addins.count
set objAddin = objExcel.addins.item(i)
if objAddin.Name = addInFileName then
objAddin.Installed = false
end if
next
objExcel.Quit
set objAddin = nothing
set objExcel = nothing
set objWshShell = createobject("WScript.Shell")
set objFileSys = createobject("Scripting.FileSystemObject")
'インストール先パスの作成
installPath = objWshShell.SpecialFolders("Appdata") & "\Microsoft\Addins\" & addInFileName
'ファイル削除
if objFileSys.FileExists(installPath) = true then
objFileSys.DeleteFile installPath , true
else
msgbox "マクロファイルが存在しません", vbExclamation
end if
set objWshShell = nothing
set objFileSys = nothing
if Err.Number = 0 then
msgbox "マクロのアンインストールが終了しました", vbInformation
else
msgbox "エラーが発生しました。実行環境を確認してください"
end if
インストーラ
on error resume next
dim installPath
dim addInName
dim addInFileName
dim objExcel
dim objAddin
'アドイン情報を設定
addInName="○ミニマクロ"
addInFileName="MacroTools.xlam"
if Msgbox(addInName & "マクロをインストールしますか?", vbyesno + vbQuestion)=vbno then
wscript.quit
end if
set objWshShell = createobject("WScript.Shell")
set objFileSys = createobject("Scripting.FileSystemObject")
'インストール先パスの作成
installPath = objWshShell.SpecialFolders("Appdata") & "\Microsoft\Addins\" & addInFileName
C:\Users\Dolphin\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Roaming\Microsoft\AddIns
'ファイルコピー(上書き)
objFileSys.CopyFile addInFileName, installPath, true
set objWshShell = nothing
set objFileSys = nothing
'Excelインスタンス化
set objExcel=createobject("Excel.application")
objExcel.workbooks.add
'マクロ登録
set objAddin = objExcel.AddIns.Add(installPath, true)
objAddin.Installed = true
'Excel終了
objExcel.Quit
set objAddin = nothing
set objExcel = nothing
if Err.Number = 0 then
msgbox "マクロのインストールが終了しました", vbInformation
else
msgbox "エラーが発生しました。実行環境を確認してください"
end if
dim installPath
dim addInName
dim addInFileName
dim objExcel
dim objAddin
'アドイン情報を設定
addInName="○ミニマクロ"
addInFileName="MacroTools.xlam"
if Msgbox(addInName & "マクロをインストールしますか?", vbyesno + vbQuestion)=vbno then
wscript.quit
end if
set objWshShell = createobject("WScript.Shell")
set objFileSys = createobject("Scripting.FileSystemObject")
'インストール先パスの作成
installPath = objWshShell.SpecialFolders("Appdata") & "\Microsoft\Addins\" & addInFileName
C:\Users\Dolphin\AppData\Local\Packages\Microsoft.Office.Desktop_8wekyb3d8bbwe\LocalCache\Roaming\Microsoft\AddIns
'ファイルコピー(上書き)
objFileSys.CopyFile addInFileName, installPath, true
set objWshShell = nothing
set objFileSys = nothing
'Excelインスタンス化
set objExcel=createobject("Excel.application")
objExcel.workbooks.add
'マクロ登録
set objAddin = objExcel.AddIns.Add(installPath, true)
objAddin.Installed = true
'Excel終了
objExcel.Quit
set objAddin = nothing
set objExcel = nothing
if Err.Number = 0 then
msgbox "マクロのインストールが終了しました", vbInformation
else
msgbox "エラーが発生しました。実行環境を確認してください"
end if
2017年8月9日水曜日
イーサネット
イーサネット
OSI参照モデルの物理層・データリンク層相当で規定。Ethernetの成り立ち
1970年代ハワイ大学が、ALOHAnet(アロハネット)による無線パケット通信システムを構築
Xerox社のロバート・メトカーフがALOHAnetを参考に、Ethernetを発明(同社が開発したパソコン『Alto』をつなぐLANとして)
Ethernetを広く普及するLAN規格にするために、XeroxがDEC社・Intel社を開発に加え、3社の頭文字をとってDIX仕様を制定する。
1980年代
1980年 DIX仕様をEthernet1.0規格として、IEEE802 委員会に提出・公開。
1982年 DIX仕様のEthernetII(version 2.0) を公開。
1983年 DIX仕様のEthernetIIをベースとしたIEEE802.3 CSMA/CDを規格化。
IEEE:The Institute Of Electrical and Electronics Engineers, Inc.米国電気電子技術者協会
Ethernetの階層構造
OSI参照モデル | ヘッダ情報 | ネットワーク機器 | |||||
第7層 アプリケーション層 | |||||||
第6層 プレゼンテーション層 | |||||||
第5層 セッション層 | |||||||
第4層 トランスポート層 | ポート番号 | ||||||
第3層 ネットワーク層 | IPアドレス | ルータ・L3スイッチ | |||||
第2層 データリンク層 | LLC副層 | IEEE802.2 LLC | MACアドレス | ブリッジ・L2スイッチ | |||
MAC副層 | IEEE802.3 Ethernet | IEEE802.4 Token Bus | IEEE802.5 Token Ring | IEEE802.11 無線LAN | |||
第1層 物理層 | リピータ |
Ethernetは第2層と第1層にまたがっている。特に、第2層はLLC(Logical Link Control)副層とMAC(Media Access Control)副層に分離しており、LLC副層がEthernetとは関係ない独立した存在になっている。
DIXイーサネットとIEEE802.3イーサネットのフレームフォーマット
Ethernetでは、ケーブルを流れる信号を「フレーム」と呼ぶ。機器間がこのフレームを送受信することで、Ethernetの通信が成り立っている。
Ethernetでは複数のフレームが存在する。
イーサネットの最小フレームサイズは64バイトで、1つのフレームは幾つかのフィールドで構成されている。

データリンク層では、イーサネットフレームにヘッダとトレーラを付加する。
また、フレーム外の先頭に「プリアンブル」と呼ばれる信号を付加する。「プリアンブル」は受信側にフレームの開始位置を知らせたり、同期を取るタイミングを与えたりするために使用される。
プリアンブルは0と1の繰り返しであり、「10101010..」のパターンで1と0が交互に続くことにより、コンピュータはフレームが送信されてきたことを認識してデータを受信するタイミングを計る。そして、プリアンブルの最後を示す「10101011」を検出すると、その次のビットから宛先MACアドレスが始まると解釈する。
- 宛先MACアドレス・・・宛先のMACアドレス
- 送信元MACアドレス・・送信元のMACアドレス
- タイプ・・・・・・・・上位層のプロトコルを識別するための番号。
IPv4:「0x0800」
ARP:「0x0806」
IPv6:「0x86DD」 - 長さ/タイプ・・・・・データフィールドの長さを表す。「0x0600」未満
2016年5月5日木曜日
問題1
1.フロア内でLANを構成する時、ノード間を接続するケーブルとして正しいものを選択しなさい

- ストレートケーブル
- クロスケーブル
- ロールオーバーケーブル
- シリアルケーブル
- 光ファイバケーブル
2.電磁ノイズの影響を受けにくいケーブルを選択しなさい
- 同軸ケーブル
- ツイストペアケーブル
- 光ファイバケーブル
- 該当なし
3.OSI参照モデルによる階層化のメリットを説明した正しいものを選択しなさい(2つ)
- 標準インターフェイスを定義することにより、異なる機種間のデータ通信を実現する
- 新しい機能やプロトコルの開発及び変更が容易になる
- 階層ごとの機能を定義することにより、高速なデータ通信を実現する
- ある階層のプロトコルを変更し、即時に他の階層に反映させることができる
4.次のOSI参照モデルの階層1〜3に該当する説明を、選択肢から選びなさい
- データリンク層
- ネットワーク層
- トランスポート層
- 信頼性の高い通信を保証する
- MACアドレスなどの物理アドレスを基に通信相手を特定する
- デジタルデータを伝送メディアで扱う信号へ変換する
- プロセス同士の論理的な通信路の確立・維持・終了を定義する
- データのフォーマットを共通の形式に変換する
- ある宛先ネットワークへの最適経路を決定する
- 直接接続されたノード間の通信を実現する
- アプリケーションごとにネットワークサービスを提供する
- 論理アドレスを基に異なるネットワーク間の通信を実現する
- フロー制御や順序制御を行う
5.次の階層1〜3に該当するPDU名称を答えなさい
- トランスポート層
- ネットワーク層
- データリンク層
6.2進数「110011001」を10進数と16進数に正しく変換しているものを選択しなさい。(2つ)
- 185
- 0x89
- 201
- 0xC9
- 217
- 0xD9
- 249
- 0xF9
7.10進数1〜5を全て2進数に変換しなさい
- 41
- 111
- 128
- 231
- 255
答え
1.フロア内でLANを構成する時、ノード間を接続するケーブルとして正しいものを選択しなさい1.A 2.B 3.A
ストレート・クロス・ストレート
2.電磁ノイズの影響を受けにくいケーブルを選択しなさい
1.C
光ケーブル
3.OSI参照モデルによる階層化のメリットを説明した正しいものを選択しなさい(2つ)
1.A 、B
標準インターフェイスを定義することにより、異なる機種間のデータ通信を実現する
新しい機能やプロトコルの開発及び変更が容易になる
4.次のOSI参照モデルの階層1〜3に該当する説明を、選択肢から選びなさい
1.BG 2.FI 3.AJ
MACアドレスなどの物理アドレスを基に通信相手を特定する
直接接続されたノード間の通信を実現する
ある宛先ネットワークへの最適経路を決定する
論理アドレスを基に異なるネットワーク間の通信を実現する
信頼性の高い通信を保証する
フロー制御や順序制御を行う
5.次の階層1〜3に該当するPDU名称を答えなさい
トランスポート層
ネットワーク層
データリンク層
セグメント
パケット
フレーム
6.2進数「110011001」を10進数と16進数に正しく変換しているものを選択しなさい。(2つ)
217 E
0xDF F
7.10進数1〜5を全て2進数に変換しなさい
41= 00101001
111=01101111
128=10000000
231=11100111
255=11111111
2進数 10進数 16進数
2進数から10進数への変換
10進数 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
2進数 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
10進数 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
2進数 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
10進数から2進数への変換
2進数から10進数への変換表を参考に、以下の通り計算する。10進数1=2進数00000001
10進数2=2進数00000010
10進数3=上の表を参考に、2進数00000011
・
・
10進数192の場合・・
192から引けるだけ引いていく。引けたら1を立てる。
引く数 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
余り | 64 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2進数 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
10進数170の場合・・
170 –
引く数 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
余り | 42 | 0 | 10 | 0 | 2 | 0 | 0 | 0 |
2進数 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
2進数から16進数への変換
- 2進数を4桁づつに分ける
- 10進数に変換する
- 16進数に変換する
2進数11111010の場合
2進数 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | |
10進数 | 8 | 4 | 2 | 1 | 8 | 4 | 2 | 1 | |
16進数 | F | A |
2進数01100011の場合
2進数 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | |
10進数 | 8 | 4 | 2 | 1 | 8 | 4 | 2 | 1 | |
16進数 | 6 | 3 |
16進数から2進数への変換
- 16進数を1桁づつに分ける
- 10進数に変換する
- 2進数に変換する
16進数 | 9 | c | |||||||
10進数 | 8 | 4 | 2 | 1 | 8 | 4 | 2 | 1 | |
2進数 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
16進数0x2Bの場合
16進数 | 2 | B | |||||||
10進数 | 8 | 4 | 2 | 1 | 8 | 4 | 2 | 1 | |
2進数 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 |
16進数から10進数への変換
- 16進数を1桁づつに分ける
- 10進数に変換する
- 2進数に変換する
- 10進数に変換する
16進数0xABの場合
16進数 | A | B | |||||||
10進数 | 8 | 4 | 2 | 1 | 8 | 4 | 2 | 1 | |
2進数 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | |
10進数 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
参考:指で数える2進数
10進数の31までなら片手の指で2進数に変換できます。1. 10進数を右手の指に以下のように割り当てます。

2016年4月24日日曜日
OSI参照モデル
OSI参照モデル
プロトコル=約束事約束事を7階層に分けて定義したもの=OSI参照モデル
OSI参照モデルを策定したところ=ISO (International Organization for Standardization : 国際標準化機構)
階層 | 名前 | 役割 | キーワード |
---|---|---|---|
第7層 | アプリケーション層 | アプリ・ソフトのルールを決める | ユーザインターフェース・メール・WEB |
第6層 | プレゼンテーション層 | データの表現形式を決める(文字コードとか) | 文字コード(ASCII・ABCDIC) 画像(JPEG・GIF ) 動画(MPEG) |
第5層 | セッション層 | 通信路の確立から終了までの管理 | WEB閲覧開始から終了まで メール受信開始から終了まで |
第4層 | トランスポート層 | 信頼性のある通信の提供(データが正しく届いたか) | コネクション確立から終了 フロー制御 順序制御 確認応答 再送制御 |
第3層 | ネットワーク層 | 最適経路を決定し、エンドツーエンドの通信を行う | 経路選択(ルーティング)の方法 IPアドレス(論理アドレス)の割り当て方法 データ(パケット)の構造 選択した経路上にデータを送出する方法 |
第2層 | データリンク層 | 隣接するノード(サブネット内)の通信を行う | データ(フレーム)の構造 データ送出タイミング 送信元と宛先の識別(MACアドレス)方法 エラー検出と対処方法 |
第1層 | 物理層 | 電気信号や光信号を正しく伝送するための機器・電気信号のルールを決め、ビットを伝送する | コネクタ形状・ピンの配置 ケーブルの種類や長さ 電圧レベル・電圧変化タイミング 通信速度・符号化形式 |
第7層 アプリケーション層

例えばメールを送る場合、送信元メールアドレス(From)、宛先メールアドレス(To・Cc・Bcc)、件名(Subject)、本文はメールソフトに必ず設けられるようルール化されています。これにより送信側と受信側が違うメールソフトを使用していても、正しくメールの送受信が行えるようになっています。また、WEBを閲覧する時はどのブラウザを使ってもURLの最初に”http:”や”https:”のような文字列が入りますが、これもアプリケーション層での決まり(WEBを見に行くと宣言する)です。このようにインターネットを利用するアプリケーションには、世界共通の規則があります。
第6層 プレゼンテーション層

現在は適切なメールソフトを利用すれば海外と日本でそれぞれの言葉を使い、メールをやり取りすることができますが、そうなる前の電子メールは英語しか使えませんでした。
英語以外の言語を使うための取り決めがなかったからです。その後各言語で独自の取り決めにより日本語(ISO-2022-JP)同士、その他の言語同士のやり取りを行うことができるようになりましたが、これはあくまでも同じ言語同士のやり取りに限られたものでした。ここまでのメールはテキスト・メールと呼ばれ、それを現在のように利用しやすく拡張した規格がMIME(Multipurpose Internet Mail Extension 多目的インターネットメール拡張)です。現在MIMEに対応したメールソフトでは、受信したメールのソースに次のような部分があります。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit
ーーーーーーーーーーーーーーーーーーーーーーーーーー
上記は全てMIMEで追加されたヘッダです。MIMEのバージョン、日本語のプレーンテキストメールであること、エンコードが7bitであることが宣言されています。
「Content-Type:」では、様々なデータタイプを表現するための符号化方式を指定することができ、続く「Content-Transfer-Encoding」でデータの変換形式が何であるかを指定しています。インターネットの中を流れる時は、このメールは標準の形式に直され、相手先で表示するときに上記の「日本語」「7bit」に従って異なる環境で読めるように変換されます。
第5層 セッション層

セッション層は、プログラム同士の論理的な通信路(セッション)の確立・維持・終了などを定義しています。
例えば、WEBページを参照するとき、WEBブラウザを起動しURLを入力して実行すると通信が開始され、ページがすべて表示されると通信が終了します。この一連の通信がセッッションに相当します。
第4層 トランスポート層

トランスポート層は、データを確実に届けるための信頼性を提供する役割を担います。
トランスポート層で定義されるものは主に以下です。
- 仮想回線(コネクション)の確立・維持・終了
- フロー制御(受信側の状態に合わせて送信量を調整する)
- 順序制御(分割されたデータを受信側で元の順番に再構成する)
- 確認応答(データが正しく相手に届いたかどうか確認する)
- 再送制御(データが届かなかった場合に再送信する)
第3層 ネットワーク層

ネットワーク層では、異なるネットワークを相互接続し、エンドツーエンドで通信するための経路選択(ルーティング)を行います。
データの転送先を決定するための情報としてIPアドレスなどの論理アドレスを使用します。
ネットワーク層で定義されるものは主に以下です。
- データの送信元及び宛先を識別するアドレスの割り当て方法
- データ(パケット)の構造
- 経路選択(ルーティング)の方法
- 選択した経路上にデータを送出する方法
第2層 データリンク層

データリンク層は、直接接続された隣接機器と正しく通信する役割を担っています。通信相手を特定するための情報としてMACアドレスなどの物理アドレスを使用します。
データリンク層で定義されるものは主に以下です。
- 通信媒体にデータを送り出すときのタイミング
- 伝送中に発生したエラーの検出と対処方法
- データ(フレーム)の構造
- データの送信元及び宛先の識別方法
第1層 物理層

物理層では、電気的・機械的なハードウェアの物理仕様が定義されています。
- コネクタの形状、ピンの数や配置
- ケーブルの種類や長さ
- 電圧レベル、電圧変化のタイミング
- 通信速度、符号化の方式
カプセル化と非カプセル化

カプセル化:データの先頭にヘッダと呼ばれる制御情報を付加すること
送信側:カプセル化
受信側:非カプセル化
カプセル化されたデータは下位層のプロトコルに渡され、下位層でも同様にカプセル化を行い、さらに下位層に渡されます。
なおデータリンク層ではデータの後ろにもトレーラと呼ばれるエラーチェック用の情報を付加します。最終的に、データは信号としてケーブル上に創出されます。
PDU
PDU(Protocol Data Unit)・・データにヘッダが追加されて扱われるデータの単位
OSI参照モデルのPDU名称
トランスポート層・・・セグメント・・TCPから受け取った場合(UDPでカプセル化されたPDUはデータグラム)ネットワーク層・・・・パケット
データリンク層・・・・フレーム
登録:
投稿 (Atom)