I agree that your translation of the first case looks correct, assuming that the MSNA values are 32-bit. The mask value 983040 would be much clearer as 0xF0000, so that you can see it gives you the first four bits of the high 16-bit word.
The second case looks plausibly correct too, although:
2a/ I would change the datatype of the value parameter to match the register (seems to be a Byte, not a Ulong) and,
2b/ given the .WriteTo routine looks capable of handling multiple bytes, I would expect to write both regist and value in the same operation, eg:
Sub Si5351a_Write_Reg (regist As Byte, value As Byte) 'writes "value" into "regist" of Si5351a via I2C
i2C.WriteTo(SI5351_Adress, Array As Byte(regist, value)) 'first the register address, then the value
End Sub
but if your code works, then obviously my expectation is wrong ;-)
What does the already-working C code look like?